rufus 0.7 → 0.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/RufusApp/RufusApp/en.lproj/RUViewController.xib +11 -19
- data/config.yml +4 -3
- data/features/step_definitions/driver_steps.rb +1 -1
- data/features/step_definitions/view_steps.rb +6 -0
- data/features/support/screens/home_page.rb +1 -0
- data/features/view.feature +8 -0
- data/lib/rufus.rb +5 -5
- data/lib/rufus/accessors/view.rb +7 -8
- data/lib/rufus/driver.rb +41 -118
- data/lib/rufus/drivers/driver_base.rb +212 -0
- data/lib/rufus/drivers/driver_factory.rb +41 -0
- data/lib/rufus/drivers/iOS_device.rb +4 -4
- data/lib/rufus/drivers/iOS_faster_device.rb +37 -0
- data/lib/rufus/drivers/iOS_faster_simulator.rb +37 -0
- data/lib/rufus/drivers/iOS_simulator.rb +4 -6
- data/lib/rufus/parser.rb +81 -0
- data/rufus.gemspec +1 -1
- data/spec/drivers_specs/driver_factory_spec.rb +38 -0
- data/spec/drivers_specs/driver_spec.rb +3 -372
- data/spec/drivers_specs/iOS_device_spec.rb +70 -12
- data/spec/drivers_specs/iOS_faster_device_spec.rb +105 -0
- data/spec/drivers_specs/iOS_faster_simulator_spec.rb +113 -0
- data/spec/drivers_specs/iOS_simulator_spec.rb +69 -13
- data/spec/parser_spec.rb +116 -0
- data/spec/spec_helper.rb +1 -0
- data/spec/view_spec.rb +14 -22
- metadata +11 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
ZmRlZWRiNzVkYTA5ZWIyNTU1MjhmNWM2OGZjOWE3ZDk3YjNiODhmOA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
NzQxZWVhZGFiYjI4NGQ3NDllYTdhMjg5OTZkNmQ0Y2ExOTdlZWU3MQ==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
MTNhY2NjZWYyZjQyZTIzMGVlNmExMDcxMDRlNTUxNGZjMDlkMDJmNGM0YWI5
|
10
|
+
NjU0MWJlMTFjMDhjYjMxNWM3OTZmNThkY2I5Y2Q0OWE5Y2U4YzQ1OTdiNGRi
|
11
|
+
ZDBmMmM1ZTlkOWM1OWIxOWNiNDAyZmE1MmEyZmZjODdhYjA0MTY=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
NTBlNDhkZGRhMjdkMDM4MWQxM2JlZDgwMmUyMDk4Mzk2NWU5ZWNiMDUyNWJl
|
14
|
+
YzA0MDdlMzQ1OTg4NmRlY2IzNjVmMDMzY2UzZTA2ZmYwOWIyMTYzNDJjNjVj
|
15
|
+
MDkwZDhlMDFhMzAyN2EyODI4OGE5Nzg3ZDgzOTcyYTZiOTA4NWQ=
|
@@ -1,7 +1,7 @@
|
|
1
1
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
2
|
-
<document type="com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB" version="3.0" toolsVersion="
|
2
|
+
<document type="com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB" version="3.0" toolsVersion="4514" systemVersion="12F45" targetRuntime="iOS.CocoaTouch.iPad" propertyAccessControl="none" useAutolayout="YES">
|
3
3
|
<dependencies>
|
4
|
-
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="
|
4
|
+
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="3747"/>
|
5
5
|
</dependencies>
|
6
6
|
<objects>
|
7
7
|
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="RUViewController">
|
@@ -21,7 +21,7 @@
|
|
21
21
|
<rect key="frame" x="0.0" y="0.0" width="768" height="1024"/>
|
22
22
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
23
23
|
<subviews>
|
24
|
-
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="4">
|
24
|
+
<button opaque="NO" contentMode="scaleToFill" ambiguous="YES" misplaced="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="4">
|
25
25
|
<rect key="frame" x="270" y="251" width="219" height="30"/>
|
26
26
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
27
27
|
<accessibility key="accessibilityConfiguration" label="rufusButton"/>
|
@@ -32,24 +32,13 @@
|
|
32
32
|
<action selector="toRufusPage:" destination="-1" eventType="touchUpInside" id="12"/>
|
33
33
|
</connections>
|
34
34
|
</button>
|
35
|
-
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="13">
|
35
|
+
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" ambiguous="YES" misplaced="YES" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="13">
|
36
36
|
<rect key="frame" x="270" y="209" width="219" height="30"/>
|
37
37
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
38
38
|
<accessibility key="accessibilityConfiguration" label="rufusTextBox"/>
|
39
39
|
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
40
40
|
<textInputTraits key="textInputTraits"/>
|
41
41
|
</textField>
|
42
|
-
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" misplaced="YES" text="Rufus Label" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="24">
|
43
|
-
<rect key="frame" x="324" y="180" width="107" height="21"/>
|
44
|
-
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
45
|
-
<accessibility key="accessibilityConfiguration" label="rufusLabel"/>
|
46
|
-
<constraints>
|
47
|
-
<constraint firstAttribute="width" constant="219" id="31"/>
|
48
|
-
</constraints>
|
49
|
-
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
50
|
-
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
|
51
|
-
<nil key="highlightedColor"/>
|
52
|
-
</label>
|
53
42
|
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="VTc-fX-2Iw">
|
54
43
|
<rect key="frame" x="304" y="302" width="150" height="30"/>
|
55
44
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
@@ -117,6 +106,13 @@
|
|
117
106
|
<action selector="toTablePage:" destination="-1" eventType="touchUpInside" id="hgd-Rn-c0B"/>
|
118
107
|
</connections>
|
119
108
|
</button>
|
109
|
+
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="Rufus Label" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="2aB-zP-NHi">
|
110
|
+
<rect key="frame" x="333" y="153" width="92" height="21"/>
|
111
|
+
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
112
|
+
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
113
|
+
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
|
114
|
+
<nil key="highlightedColor"/>
|
115
|
+
</label>
|
120
116
|
</subviews>
|
121
117
|
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
122
118
|
<constraints>
|
@@ -124,10 +120,6 @@
|
|
124
120
|
<constraint firstItem="13" firstAttribute="leading" secondItem="4" secondAttribute="leading" id="17"/>
|
125
121
|
<constraint firstItem="4" firstAttribute="trailing" secondItem="13" secondAttribute="trailing" id="20"/>
|
126
122
|
<constraint firstItem="13" firstAttribute="top" secondItem="2" secondAttribute="top" constant="209" id="23"/>
|
127
|
-
<constraint firstItem="24" firstAttribute="top" secondItem="2" secondAttribute="top" constant="166" id="25"/>
|
128
|
-
<constraint firstItem="24" firstAttribute="trailing" secondItem="13" secondAttribute="trailing" id="27"/>
|
129
|
-
<constraint firstItem="24" firstAttribute="leading" secondItem="13" secondAttribute="leading" id="29"/>
|
130
|
-
<constraint firstItem="24" firstAttribute="leading" secondItem="2" secondAttribute="leading" constant="270" id="30"/>
|
131
123
|
</constraints>
|
132
124
|
<simulatedStatusBarMetrics key="simulatedStatusBarMetrics" statusBarStyle="blackOpaque"/>
|
133
125
|
</view>
|
data/config.yml
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
browser: iOS
|
2
2
|
platform: Mac
|
3
|
-
version: 7.0
|
3
|
+
version: 7.0.3
|
4
4
|
app: ./build/Debug-iphoneos/RufusApp.app
|
5
5
|
udid: 4550a561efc2c047637f342bd6320623ba98c385
|
6
6
|
use_physical: false
|
7
|
-
sim_app_path: <%=ENV['HOME']%>/Library/Application Support/iPhone Simulator/7.0/Applications/4550a561efc2c047637f342bd6320623ba98c385/RufusApp.app
|
8
|
-
device: iPhoneSimulator
|
7
|
+
sim_app_path: <%=ENV['HOME']%>/Library/Application Support/iPhone Simulator/7.0.3/Applications/4550a561efc2c047637f342bd6320623ba98c385/RufusApp.app
|
8
|
+
device: iPhoneSimulator
|
9
|
+
optimized: true
|
@@ -5,7 +5,7 @@ Given(/^I have created a valid appium driver for iOS$/) do
|
|
5
5
|
config = $driver.config
|
6
6
|
config["browser"].should eq "iOS"
|
7
7
|
config["platform"].should eq "Mac"
|
8
|
-
config["version"].should eq 7.0
|
8
|
+
config["version"].should eq "7.0.3"
|
9
9
|
config["app"].should eq app_path
|
10
10
|
end
|
11
11
|
Given(/^the app is in the "([^"]*)" orientation/) do |orient|
|
@@ -38,4 +38,10 @@ Then(/^in a block can see the existence of views "([^"]*)", "([^"]*)" and "([^"]
|
|
38
38
|
screen.send("view_#{view_2}_view").exists?.should be_true
|
39
39
|
screen.send("view_#{view_3}_view").exists?.should be_true
|
40
40
|
end
|
41
|
+
end
|
42
|
+
Then(/^I can see the view defined "([^"]*)" has text "([^"]*)"$/) do |which, text|
|
43
|
+
on(HomePage).send("view_#{which}_view").text.should == text
|
44
|
+
end
|
45
|
+
Then(/^I can determine the view defined "([^"]*)" is of type "([^"]*)"$/) do |which, type|
|
46
|
+
on(HomePage).send("view_#{which}_view").class.should.eql?(type)
|
41
47
|
end
|
data/features/view.feature
CHANGED
@@ -36,3 +36,11 @@ Feature: Interacting with views
|
|
36
36
|
Given I am on the "HomePage"
|
37
37
|
Then in a block can see the existence of views "rufus", "exists" and "displayed"
|
38
38
|
|
39
|
+
Scenario: Getting text of a view
|
40
|
+
Given I am on the "HomePage"
|
41
|
+
Then I can see the view defined "label" has text "Rufus Label"
|
42
|
+
|
43
|
+
Scenario: Getting the class of a view
|
44
|
+
Given I have created a valid appium driver for iOS
|
45
|
+
And I am on the "HomePage"
|
46
|
+
Then I can determine the view defined "label" is of type "UIAStaticText"
|
data/lib/rufus.rb
CHANGED
@@ -55,23 +55,23 @@ module Rufus
|
|
55
55
|
end
|
56
56
|
|
57
57
|
def find(locator)
|
58
|
-
selenium.find(locator)
|
58
|
+
selenium.send(:driver).find(locator)
|
59
59
|
end
|
60
60
|
|
61
61
|
def click(locator)
|
62
|
-
|
62
|
+
find(locator).click
|
63
63
|
end
|
64
64
|
|
65
65
|
def page_source
|
66
|
-
selenium.page_source
|
66
|
+
selenium.send(:driver).page_source
|
67
67
|
end
|
68
68
|
|
69
69
|
def elements_of_type(type)
|
70
|
-
selenium.elements_by_tag(type)
|
70
|
+
selenium.send(:driver).elements_by_tag(type)
|
71
71
|
end
|
72
72
|
|
73
73
|
def scroll_to(locator)
|
74
|
-
selenium.scroll_to(locator)
|
74
|
+
selenium.send(:driver).scroll_to(locator)
|
75
75
|
end
|
76
76
|
end
|
77
77
|
|
data/lib/rufus/accessors/view.rb
CHANGED
@@ -8,32 +8,31 @@ module Rufus
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def exists?
|
11
|
-
|
12
|
-
!element.nil?
|
11
|
+
selenium.exists?(what)
|
13
12
|
end
|
14
13
|
|
15
14
|
def click
|
16
|
-
selenium.
|
15
|
+
selenium.click(what)
|
17
16
|
end
|
18
17
|
|
19
18
|
def displayed?
|
20
|
-
selenium.
|
19
|
+
selenium.displayed?(what)
|
21
20
|
end
|
22
21
|
|
23
22
|
def enabled?
|
24
|
-
selenium.
|
23
|
+
selenium.enabled?(what)
|
25
24
|
end
|
26
25
|
|
27
26
|
def text
|
28
|
-
selenium.
|
27
|
+
selenium.text(what)
|
29
28
|
end
|
30
29
|
|
31
30
|
def send_keys(keys)
|
32
|
-
selenium.
|
31
|
+
selenium.type(keys, what[:name])
|
33
32
|
end
|
34
33
|
|
35
34
|
def class
|
36
|
-
selenium.
|
35
|
+
selenium.class(what)
|
37
36
|
end
|
38
37
|
|
39
38
|
def what
|
data/lib/rufus/driver.rb
CHANGED
@@ -1,66 +1,62 @@
|
|
1
1
|
require 'yaml'
|
2
|
-
require 'rufus/drivers/iOS_device'
|
3
|
-
require 'rufus/drivers/iOS_simulator'
|
4
|
-
require 'selenium-webdriver'
|
5
2
|
require 'erb'
|
6
|
-
require '
|
3
|
+
require 'rufus/drivers/driver_factory'
|
7
4
|
|
8
5
|
module Rufus
|
9
6
|
class Driver
|
10
7
|
|
8
|
+
attr_reader :config
|
9
|
+
attr_reader :url
|
10
|
+
|
11
11
|
def initialize
|
12
12
|
raise 'No config.yml found' if !File.exists?('config.yml')
|
13
13
|
@config = YAML.load(ERB.new(File.read('config.yml')).result)
|
14
|
-
|
14
|
+
driver
|
15
15
|
end
|
16
16
|
|
17
17
|
def start
|
18
|
-
driver.
|
18
|
+
driver.start
|
19
19
|
end
|
20
20
|
|
21
21
|
def quit
|
22
22
|
driver.quit
|
23
|
-
@
|
24
|
-
end
|
25
|
-
|
26
|
-
def config
|
27
|
-
@config
|
28
|
-
end
|
29
|
-
|
30
|
-
def server_url
|
31
|
-
@url
|
23
|
+
@selenium_driver = nil
|
32
24
|
end
|
33
25
|
|
34
26
|
def find(locator)
|
35
|
-
|
36
|
-
what = locator[how]
|
37
|
-
begin
|
38
|
-
driver.find_element(how, what)
|
39
|
-
rescue Selenium::WebDriver::Error::NoSuchElementError
|
40
|
-
return nil
|
41
|
-
end
|
27
|
+
driver.find(locator)
|
42
28
|
end
|
43
29
|
|
44
30
|
def cells(locator)
|
45
|
-
|
46
|
-
|
47
|
-
|
31
|
+
driver.cells(locator)
|
32
|
+
end
|
33
|
+
|
34
|
+
def exists?(locator)
|
35
|
+
driver.exists?(locator)
|
48
36
|
end
|
49
37
|
|
50
38
|
def click(locator)
|
51
|
-
|
39
|
+
driver.click(locator)
|
52
40
|
end
|
53
41
|
|
54
42
|
def press_button name
|
55
|
-
|
43
|
+
driver.press_button name
|
56
44
|
end
|
57
45
|
|
58
46
|
def enabled?(locator)
|
59
|
-
|
47
|
+
driver.enabled?(locator)
|
60
48
|
end
|
61
49
|
|
62
50
|
def displayed?(locator)
|
63
|
-
|
51
|
+
driver.displayed?(locator)
|
52
|
+
end
|
53
|
+
|
54
|
+
def text(locator)
|
55
|
+
driver.text(locator)
|
56
|
+
end
|
57
|
+
|
58
|
+
def class(locator)
|
59
|
+
driver.class(locator)
|
64
60
|
end
|
65
61
|
|
66
62
|
def orientation
|
@@ -72,87 +68,47 @@ module Rufus
|
|
72
68
|
end
|
73
69
|
|
74
70
|
def type(keys, name)
|
75
|
-
|
76
|
-
element.click
|
77
|
-
sleep 1
|
78
|
-
element.send_keys keys
|
71
|
+
driver.type(keys, name)
|
79
72
|
end
|
80
73
|
|
81
74
|
def sequence(*names, times)
|
82
|
-
|
75
|
+
driver.sequence(names, times, 1)
|
83
76
|
end
|
84
77
|
|
85
78
|
def buttons
|
86
|
-
buttons
|
87
|
-
elements = elements_by_tag 'UIAButton'
|
88
|
-
elements.each do |element|
|
89
|
-
buttons << element.text
|
90
|
-
end
|
91
|
-
buttons
|
79
|
+
driver.buttons
|
92
80
|
end
|
93
81
|
|
94
82
|
def text_fields
|
95
|
-
|
96
|
-
elements = elements_by_tag 'UIATextField'
|
97
|
-
elements.each do |element|
|
98
|
-
fields << element.text
|
99
|
-
end
|
100
|
-
fields
|
83
|
+
driver.text_fields
|
101
84
|
end
|
102
85
|
|
103
86
|
def labels
|
104
|
-
labels
|
105
|
-
elements = elements_by_tag 'UIAStaticText'
|
106
|
-
elements.each do |element|
|
107
|
-
labels << element.text
|
108
|
-
end
|
109
|
-
labels
|
87
|
+
driver.labels
|
110
88
|
end
|
111
89
|
|
112
90
|
def timed_sequence(names, times, seconds)
|
113
|
-
|
114
|
-
until current == times
|
115
|
-
names.each do |name|
|
116
|
-
click(:name => name)
|
117
|
-
sleep seconds
|
118
|
-
|
119
|
-
end
|
120
|
-
current += 1
|
121
|
-
puts "sequence #{current} completed"
|
122
|
-
end
|
91
|
+
driver.timed_sequence(names, times, seconds)
|
123
92
|
end
|
124
93
|
|
125
94
|
def find_alert(locator)
|
126
|
-
|
127
|
-
all_elements.each do |element|
|
128
|
-
if is_alert?(element)
|
129
|
-
alert = element if match?(element, locator[:name])
|
130
|
-
end
|
131
|
-
end
|
132
|
-
alert
|
95
|
+
driver.find_alert(locator)
|
133
96
|
end
|
134
97
|
|
135
98
|
def click_alert(button)
|
136
|
-
|
137
|
-
click_alert_button(button)
|
138
|
-
end
|
99
|
+
driver.click_alert(button)
|
139
100
|
end
|
140
101
|
|
141
102
|
def alert_shown?
|
142
|
-
|
143
|
-
if is_alert?(element)
|
144
|
-
return true
|
145
|
-
end
|
146
|
-
end
|
147
|
-
false
|
103
|
+
driver.alert_shown?
|
148
104
|
end
|
149
105
|
|
150
106
|
def class_for(element)
|
151
|
-
element
|
107
|
+
driver.class_for(element)
|
152
108
|
end
|
153
109
|
|
154
110
|
def match?(element, name)
|
155
|
-
|
111
|
+
driver.match?
|
156
112
|
end
|
157
113
|
|
158
114
|
def page_source
|
@@ -160,56 +116,23 @@ module Rufus
|
|
160
116
|
end
|
161
117
|
|
162
118
|
def all_elements
|
163
|
-
|
119
|
+
driver.all_elements
|
164
120
|
end
|
165
121
|
|
166
122
|
def elements_by_tag(name)
|
167
|
-
driver.
|
123
|
+
driver.elements_by_tag name
|
168
124
|
end
|
169
125
|
|
170
126
|
def scroll_to(locator)
|
171
|
-
|
172
|
-
driver.execute_script 'mobile: scrollTo', {'element' => id}
|
127
|
+
driver.scroll_to(locator)
|
173
128
|
end
|
174
129
|
|
175
130
|
def screenshot(name)
|
176
|
-
driver.
|
177
|
-
end
|
178
|
-
|
179
|
-
private
|
180
|
-
|
181
|
-
def url(config)
|
182
|
-
if config["appium_url"].nil? || config["appium_url"].eql?("")
|
183
|
-
'http://127.0.0.1:4723/wd/hub'
|
184
|
-
else
|
185
|
-
config["appium_url"]
|
186
|
-
end
|
187
|
-
end
|
188
|
-
|
189
|
-
def click_alert_button(button)
|
190
|
-
all_elements.each do |element|
|
191
|
-
element.click if is_table_view_cell?(element) && match?(element, button)
|
192
|
-
end
|
193
|
-
end
|
194
|
-
|
195
|
-
def is_alert?(element)
|
196
|
-
class_for(element).eql?('UIAAlert')
|
197
|
-
end
|
198
|
-
|
199
|
-
def is_table_view_cell?(element)
|
200
|
-
class_for(element).eql?('UIATableCell')
|
131
|
+
driver.screenshot name
|
201
132
|
end
|
202
133
|
|
203
134
|
def driver
|
204
|
-
|
205
|
-
@selenium ||= Rufus::Drivers::IOS_Device.for(@config,@url)
|
206
|
-
else
|
207
|
-
@selenium ||= Rufus::Drivers::IOS_Simulator.for(@config,@url)
|
208
|
-
end
|
209
|
-
end
|
210
|
-
|
211
|
-
def use_device
|
212
|
-
@config["use_physical"] == true
|
135
|
+
@selenium_driver ||= Rufus::Drivers::DriverFactory.driver_for(@config)
|
213
136
|
end
|
214
137
|
end
|
215
138
|
end
|