Class: Appium::Core::Driver
- Inherits:
-
Object
- Object
- Appium::Core::Driver
- Includes:
- Waitable
- Defined in:
- lib/appium_lib_core/driver.rb
Constant Summary collapse
- DEFAULT_APPIUM_PORT =
4723
Instance Attribute Summary collapse
-
#automation_name ⇒ Hash
readonly
Automation name sent to appium server or received by server.
If automation_name isnil
, it is not set both client side and server side. -
#caps ⇒ Core::Base::Capabilities
readonly
Selenium webdriver capabilities.
-
#custom_url ⇒ String
readonly
Custom URL for the selenium server.
-
#default_wait ⇒ Integer
readonly
Default wait time for elements to appear in Appium server side.
-
#device ⇒ Symbol
readonly
Device type to request from the appium server.
-
#direct_connect ⇒ Bool
readonly
[Experimental feature]
Enable an experimental feature updating Http client endpoint following below keys by Appium/Selenium server.
This works with Base::Http::Default. - #driver ⇒ Appium::Core::Base::Driver readonly
-
#enable_idempotency_header ⇒ Bool
readonly
Return if adding 'x-idempotency-key' header is enabled for each new session request.
-
#export_session ⇒ Boolean
readonly
Export session id to textfile in /tmp for 3rd party tools.
-
#export_session_path ⇒ String
readonly
By default, session id is exported in '/tmp/appium_lib_session'.
-
#http_client ⇒ Appium::Core::Base::Http::Default
readonly
Return http client called in start_driver().
-
#listener ⇒ Object
readonly
instance of AbstractEventListener for logging support Nil by default.
-
#port ⇒ Integer
readonly
Appium's server port.
-
#wait_interval ⇒ Integer
readonly
Return a time to wait interval.
-
#wait_timeout ⇒ Integer
readonly
Return a time wait timeout.
Class Method Summary collapse
-
.for(opts = {}) ⇒ Driver
Creates a new driver and extend particular methods.
Instance Method Summary collapse
-
#appium_server_version ⇒ Hash
Returns the server's version info.
-
#initialize(opts = {}) ⇒ Driver
constructor
A new instance of Driver.
-
#platform_version ⇒ Array<Integer>
Return the platform version as an array of integers.
-
#quit_driver ⇒ void
Quits the driver.
-
#start_driver(server_url: nil, http_client_ops: { http_client: nil, open_timeout: 999_999, read_timeout: 999_999 }) ⇒ Selenium::WebDriver
Creates a new global driver and quits the old one if it exists.
Methods included from Waitable
Constructor Details
#initialize(opts = {}) ⇒ Driver
Returns a new instance of Driver.
292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 |
# File 'lib/appium_lib_core/driver.rb', line 292 def initialize(opts = {}) @delegate_target = self # for testing purpose @automation_name = nil # initialise before 'set_automation_name' opts = Appium.symbolize_keys opts validate_keys(opts) @custom_url = opts.delete :url @caps = get_caps(opts) set_appium_lib_specific_values(get_appium_lib_opts(opts)) set_app_path set_appium_device set_automation_name extend_for(device: @device, automation_name: @automation_name) self # rubocop:disable Lint/Void end |
Instance Attribute Details
#automation_name ⇒ Hash (readonly)
Automation name sent to appium server or received by server.
If automation_name is nil
, it is not set both client side and server side.
131 132 133 |
# File 'lib/appium_lib_core/driver.rb', line 131 def automation_name @automation_name end |
#caps ⇒ Core::Base::Capabilities (readonly)
Selenium webdriver capabilities
111 112 113 |
# File 'lib/appium_lib_core/driver.rb', line 111 def caps @caps end |
#custom_url ⇒ String (readonly)
Custom URL for the selenium server. If set this attribute, ruby_lib_core try to handshake to the custom url.
Defaults to false. Then try to connect to http://127.0.0.1:#{port}/wd/hub
.
136 137 138 |
# File 'lib/appium_lib_core/driver.rb', line 136 def custom_url @custom_url end |
#default_wait ⇒ Integer (readonly)
Default wait time for elements to appear in Appium server side. Provide { appium_lib: { wait: 30 } }
to Appium::Core.for
147 148 149 |
# File 'lib/appium_lib_core/driver.rb', line 147 def default_wait @default_wait end |
#device ⇒ Symbol (readonly)
Device type to request from the appium server
126 127 128 |
# File 'lib/appium_lib_core/driver.rb', line 126 def device @device end |
#direct_connect ⇒ Bool (readonly)
[Experimental feature]
Enable an experimental feature updating Http client endpoint following below keys by Appium/Selenium server.
This works with Base::Http::Default.
If your Selenium/Appium server decorates the new session capabilities response with the following keys:
-
directConnectProtocol
-
directConnectHost
-
directConnectPort
-
directConnectPath
ignore them if this parameter is false
. Defaults to true. These keys can have appium:
prefix.
189 190 191 |
# File 'lib/appium_lib_core/driver.rb', line 189 def direct_connect @direct_connect end |
#driver ⇒ Appium::Core::Base::Driver (readonly)
173 174 175 |
# File 'lib/appium_lib_core/driver.rb', line 173 def driver @driver end |
#enable_idempotency_header ⇒ Bool (readonly)
Return if adding 'x-idempotency-key' header is enabled for each new session request. Following commands should not have the key. The key is unique for each http client instance. Defaults to true
github.com/appium/appium-base-driver/pull/400
122 123 124 |
# File 'lib/appium_lib_core/driver.rb', line 122 def enable_idempotency_header @enable_idempotency_header end |
#export_session ⇒ Boolean (readonly)
Export session id to textfile in /tmp for 3rd party tools. False by default.
140 141 142 |
# File 'lib/appium_lib_core/driver.rb', line 140 def export_session @export_session end |
#export_session_path ⇒ String (readonly)
Returns By default, session id is exported in '/tmp/appium_lib_session'.
142 143 144 |
# File 'lib/appium_lib_core/driver.rb', line 142 def export_session_path @export_session_path end |
#http_client ⇒ Appium::Core::Base::Http::Default (readonly)
Return http client called in start_driver()
115 116 117 |
# File 'lib/appium_lib_core/driver.rb', line 115 def http_client @http_client end |
#listener ⇒ Object (readonly)
instance of AbstractEventListener for logging support Nil by default
170 171 172 |
# File 'lib/appium_lib_core/driver.rb', line 170 def listener @listener end |
#port ⇒ Integer (readonly)
Appium's server port. 4723 is by default. Defaults to DEFAULT_APPIUM_PORT.
Provide { appium_lib: { port: 8080 } }
to Appium::Core.for. :custom_url
is prior than :port
if :custom_url
is set.
153 154 155 |
# File 'lib/appium_lib_core/driver.rb', line 153 def port @port end |
#wait_interval ⇒ Integer (readonly)
Return a time to wait interval. 0.5 seconds is by default Wait::DEFAULT_INTERVAL.
Wait interval time for Base::Wait, wait and wait_true.
Provide { appium_lib: { wait_interval: 0.1 } }
to Appium::Core.for.
166 167 168 |
# File 'lib/appium_lib_core/driver.rb', line 166 def wait_interval @wait_interval end |
#wait_timeout ⇒ Integer (readonly)
Return a time wait timeout. 30 seconds is by default Wait::DEFAULT_TIMEOUT.
Wait time for Base::Wait, wait and wait_true.
Provide { appium_lib: { wait_timeout: 20 } }
to Appium::Core.for.
160 161 162 |
# File 'lib/appium_lib_core/driver.rb', line 160 def wait_timeout @wait_timeout end |
Class Method Details
.for(opts = {}) ⇒ Driver
Creates a new driver and extend particular methods
277 278 279 |
# File 'lib/appium_lib_core/driver.rb', line 277 def self.for(opts = {}) new(opts) end |
Instance Method Details
#appium_server_version ⇒ Hash
Returns the server's version info. This method calls driver.remote_status
internally
Returns blank hash in a case driver.remote_status
got an error such as Selenium Grid. It returns 500 error against 'remote_status'.
468 469 470 471 472 473 474 475 476 |
# File 'lib/appium_lib_core/driver.rb', line 468 def appium_server_version return {} if @driver.nil? @driver.remote_status rescue StandardError # Ignore error case in a case the target appium server # does not support `/status` API. {} end |
#platform_version ⇒ Array<Integer>
Return the platform version as an array of integers
485 486 487 488 |
# File 'lib/appium_lib_core/driver.rb', line 485 def platform_version p_version = @driver.capabilities['platformVersion'] || @driver.session_capabilities['platformVersion'] p_version.split('.').map(&:to_i) end |
#quit_driver ⇒ void
This method returns an undefined value.
Quits the driver
440 441 442 443 444 |
# File 'lib/appium_lib_core/driver.rb', line 440 def quit_driver @driver.quit rescue # rubocop:disable Style/RescueStandardError nil end |
#start_driver(server_url: nil, http_client_ops: { http_client: nil, open_timeout: 999_999, read_timeout: 999_999 }) ⇒ Selenium::WebDriver
Creates a new global driver and quits the old one if it exists. You can customise http_client as the following
355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 |
# File 'lib/appium_lib_core/driver.rb', line 355 def start_driver(server_url: nil, http_client_ops: { http_client: nil, open_timeout: 999_999, read_timeout: 999_999 }) @custom_url ||= server_url || "http://127.0.0.1:#{@port}/wd/hub" @http_client = get_http_client http_client: http_client_ops.delete(:http_client), open_timeout: http_client_ops.delete(:open_timeout), read_timeout: http_client_ops.delete(:read_timeout) if @enable_idempotency_header if @http_client.instance_variable_defined? :@additional_headers @http_client.additional_headers[Appium::Core::Base::Http::RequestHeaders::KEYS[:idempotency]] = SecureRandom.uuid else ::Appium::Logger.warn 'No additional_headers attribute in this http client instance' end end begin @driver = ::Appium::Core::Base::Driver.new(listener: @listener, http_client: @http_client, capabilities: @caps, # ::Selenium::WebDriver::Remote::Capabilities url: @custom_url, wait_timeout: @wait_timeout, wait_interval: @wait_interval, automation_name: @automation_name) if @direct_connect d_c = DirectConnections.new(@driver.capabilities) @driver.update_sending_request_to(protocol: d_c.protocol, host: d_c.host, port: d_c.port, path: d_c.path) end # export session write_session_id(@driver.session_id, @export_session_path) if @export_session rescue Errno::ECONNREFUSED raise "ERROR: Unable to connect to Appium. Is the server running on #{@custom_url}?" end if @http_client.instance_variable_defined? :@additional_headers # We only need the key for a new session request. Should remove it for other following commands. @http_client.additional_headers.delete Appium::Core::Base::Http::RequestHeaders::KEYS[:idempotency] end # If "automationName" is set only server side, this method set "automationName" attribute into @automation_name. # Since @automation_name is set only client side before start_driver is called. set_automation_name_if_nil set_implicit_wait_by_default(@default_wait) @driver end |