Skip to content
This repository was archived by the owner on Aug 10, 2022. It is now read-only.

Commit 3848c23

Browse files
committed
Fix is mobile checking
1 parent 0f04383 commit 3848c23

File tree

3 files changed

+32
-31
lines changed

3 files changed

+32
-31
lines changed

eyes_selenium/applitools/selenium/eyes_selenium_utils.py

Lines changed: 16 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,10 @@
101101

102102

103103
def is_mobile_platform(driver):
104+
# type: (AnyWebDriver) -> bool
105+
"""
106+
Returns whether the platform running is a mobile browser or app.
107+
"""
104108
driver = get_underlying_driver(driver)
105109
if isinstance(driver, AppiumWebDriver):
106110
return True
@@ -110,43 +114,27 @@ def is_mobile_platform(driver):
110114
def is_mobile_web(driver):
111115
# type: (AnyWebDriver) -> bool
112116
"""
113-
Returns whether the platform running is a mobile device or not.
114-
115-
:return: True if the platform running the test is a mobile platform. False otherwise.
116-
"""
117-
is_mobile_script = """
118-
if( navigator.userAgent.match(/Android/i) ||
119-
navigator.userAgent.match(/iPhone/i) ||
120-
navigator.userAgent.match(/iPad/i) ||
121-
navigator.userAgent.match(/iPod/i) ) {
122-
return true;
123-
} else {
124-
return false;
125-
}
117+
Returns whether the platform running is a mobile browser.
126118
"""
127119
# if driver is selenium based
128120
platform_name = driver.desired_capabilities.get("platformName", "").lower()
129-
# platformName sometime have different names
121+
browser_name = driver.desired_capabilities.get("browserName", "").lower()
130122
is_mobile = "android" in platform_name or "ios" in platform_name
131-
if not is_mobile:
132-
try:
133-
is_mobile = driver.execute_script(is_mobile_script)
134-
except WebDriverException as e:
135-
logger.warning(
136-
"Got error during checking if current platform is mobile web. "
137-
"\n\t {}".format(str(e))
138-
)
139-
is_mobile = False
140-
return is_mobile
123+
if is_mobile and browser_name:
124+
return True
125+
return False
141126

142127

143128
def is_mobile_app(driver):
144-
# TODO: check with hybrid mobile apps
129+
# type: (AnyWebDriver) -> bool
130+
"""
131+
Returns whether the platform running is a mobile app.
132+
"""
145133
platform_name = driver.desired_capabilities.get("platformName", "").lower()
146-
# platformName sometime have different names
147-
is_mobile = "android" in platform_name or "ios" in platform_name
134+
browser_name = driver.desired_capabilities.get("browserName", "").lower()
148135
app = driver.desired_capabilities.get("app", None)
149-
if is_mobile and app:
136+
is_mobile = "android" in platform_name or "ios" in platform_name
137+
if is_mobile and app and not browser_name:
150138
return True
151139
return False
152140

eyes_selenium/applitools/selenium/selenium_eyes.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,7 @@ def check(self, name, check_settings=None):
243243
)
244244
self._original_frame_chain = self.driver.frame_chain.clone()
245245

246-
if not self.driver.is_mobile_web:
246+
if not self.driver.is_mobile_platform:
247247
# hide scrollbar for main window
248248
self._try_hide_scrollbars()
249249

@@ -525,7 +525,7 @@ def _environment(self):
525525
logger.info("No OS set, checking for mobile OS...")
526526
# Since in Python Appium driver is the same for Android and iOS,
527527
# we need to use the desired capabilities to figure this out.
528-
if self._driver.is_mobile_platform:
528+
if eyes_selenium_utils.is_mobile_platform(self._driver):
529529
platform_name = self._driver.platform_name
530530
logger.info(platform_name + " detected")
531531
platform_version = self._driver.platform_version

tests/unit/eyes_selenium/test_eyes_selenium_utils.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,28 @@
2121
)
2222
def test_different_mobile_platform_names(driver_mock, platform_name):
2323
driver_mock.desired_capabilities["platformName"] = platform_name
24+
driver_mock.desired_capabilities["browserName"] = "someBrowser"
2425
assert eyes_selenium_utils.is_mobile_web(driver_mock)
26+
assert not eyes_selenium_utils.is_mobile_app(driver_mock)
2527

2628

2729
@pytest.mark.parametrize("platform_name", ["Windows", "Winmo", "Linux", "macOs"])
2830
def test_different_not_mobile_platform_names(driver_mock, platform_name):
2931
driver_mock.desired_capabilities["platformName"] = platform_name
32+
driver_mock.desired_capabilities["browserName"] = "someBrowser"
3033
assert not eyes_selenium_utils.is_mobile_web(driver_mock)
34+
assert not eyes_selenium_utils.is_mobile_app(driver_mock)
35+
assert not eyes_selenium_utils.is_mobile_platform(driver_mock)
3136

3237

3338
def test_appium_webdriver(driver_mock):
3439
driver_mock._driver = mock.Mock(AppiumWebDriver)
35-
assert eyes_selenium_utils.is_mobile_web(driver_mock)
40+
assert eyes_selenium_utils.is_mobile_platform(driver_mock)
41+
42+
43+
@pytest.mark.parametrize("platform_name", ["Android", "ios 11"])
44+
def test_using_mobile_app(driver_mock, platform_name):
45+
driver_mock.desired_capabilities["app"] = "some_app"
46+
driver_mock.desired_capabilities["platformName"] = platform_name
47+
assert eyes_selenium_utils.is_mobile_app(driver_mock)
48+
assert not eyes_selenium_utils.is_mobile_web(driver_mock)

0 commit comments

Comments
 (0)