Skip to content

Instantly share code, notes, and snippets.

@rerorero
Last active July 15, 2022 04:20
Show Gist options
  • Save rerorero/5393cc24f6bc5cb944519bee4f7e3ff6 to your computer and use it in GitHub Desktop.
Save rerorero/5393cc24f6bc5cb944519bee4f7e3ff6 to your computer and use it in GitHub Desktop.
Selenium memo
Appium:Core.for(caps) -> Appium::Core::Driver.for() -> Driver::initialize
- new Selenium::WebDriver::Remote::Capabilities
- capabilitiesに応じてBrdige.forを実行
- ex: iosなら ::Appium::Core::Ios::Xcuitest::Bridge.for self 中ではselfにmoduleをextendしている
- Appium::Core::Ios::Xcuitest::Device をextend
- add_endpoint_methodで拡張している
- hide_keyboard
- background_app
- start_performance_record
- get_performance_record
- start_recording_screen
start_driver()
- http_client作成, idempotency headerを生成するオプションがある
- @driver = ::Appium::Core::Base::Driver.new() ここでもnewしている
Appium::Core::Driver(このメソッドの所属クラス)は素のクラスでAppium::Core::Base::DriverがSelenium::WebDriver::Driverを継承している
Appium::Core::DriverはSelenium Driverのラッパーというかfactory class的な存在。
Appium::Core::Base::Driverはいろいろincludeしている
include ::Selenium::WebDriver::DriverExtensions::UploadsFiles
include ::Selenium::WebDriver::DriverExtensions::HasSessionId
include ::Selenium::WebDriver::DriverExtensions::HasWebStorage
include ::Appium::Core::Base::Rotatable
include ::Appium::Core::Base::SearchContext
include ::Appium::Core::Base::TakesScreenshot
include ::Appium::Core::Base::HasRemoteStatus
include ::Appium::Core::Base::HasLocation
include ::Appium::Core::Base::HasNetworkConnection
include ::Appium::Core::Waitable
Selenium::WebDriver::Deriver::initialize()
- create_bridge() Appium::Core::Base::Driverでoverrideしている
Appium::Core::Base::Bridge::new() capabilitiesやhttp clientなどが渡ってくる
    bridgeはhttp clientを持っていてremoteにアクセスする。bridge.executeでBridge::COMMANDSに定義されているコマンド(API)を呼び出す
bridge.create_session()
bridge.execute(:new_session)でサーバーに問い合わせsession id生成
@bridgeに設定
- DirectConnectionsが設定されている場合intemediate serverを回避して直接繋げられるらしい。普通アクセスできるんだろうか・・?
https://appiumpro.com/editions/86-connecting-directly-to-appium-hosts-in-distributed-environments
- session idをファイルに書く
- @driverを返す
Appium::Core::DriverはWebDriver
CommandExecutorを持っていてそのラッパーでもある。
CommandExecutorはremote serverにHTTPをコマンドとして送信する
- execute()
CommandExecutorで指定のcommandをremote serverに贈り実行する
- execute_script()
渡されたjavascriptを同期的に実行
W3C_EXECUTE_SCRIPT_ASYNC コマンドを実行
JavaにはexecuteDriverScriptというまとめて送るやつがあるらしい
https://www.headspin.io/course-material/speeding-up-appium-tests-in-distributed-environments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment