Skip to content

Commit ec8ade9

Browse files
authored
Merge pull request #593 from seleniumbase/add-get-user-agent
Add get_user_agent() and improve mobile compatibility
2 parents 67ac66b + 4476a24 commit ec8ade9

File tree

18 files changed

+149
-8
lines changed

18 files changed

+149
-8
lines changed

examples/offline_examples/demo_page.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<html>
22
<head>
33
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
4+
<meta name="viewport" content="width=device-width, initial-scale=0.5">
45
<title>Web Testing Page</title>
56
<style>
67
html {
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import pytest
2+
from seleniumbase import BaseCase
3+
4+
5+
@pytest.mark.offline # Can be run with: "pytest -m offline"
6+
class OfflineTestClass(BaseCase):
7+
8+
def test_get_user_agent(self):
9+
self.open("data:,")
10+
user_agent = self.get_user_agent()
11+
print('\nUser Agent = "%s"' % user_agent)

examples/test_get_user_agent.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
from seleniumbase import BaseCase
2+
3+
4+
class UserAgentTestClass(BaseCase):
5+
6+
def test_get_user_agent(self):
7+
self.open("data:,")
8+
user_agent = self.get_user_agent()
9+
print('\nUser Agent = "%s"' % user_agent)
10+
self.set_messenger_theme(
11+
theme="flat", location="top_center")
12+
self.post_message(user_agent, duration=4)

examples/tour_examples/driverjs_maps_tour.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
class MyTestClass(BaseCase):
55

6-
def test_basic(self):
6+
def test_create_tour(self):
77
self.open("https://www.google.com/maps/@42.3598616,-71.0912631,15z")
88
self.wait_for_element("#searchboxinput")
99
self.wait_for_element("#minimap")

examples/tour_examples/xkcd_tour.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
class MyTestClass(BaseCase):
55

6-
def test_basic(self):
6+
def test_create_tour(self):
77
self.open('https://xkcd.com/1117/')
88
self.assert_element('img[alt="My Sky"]')
99
self.create_tour(theme="dark")

help_docs/method_summary.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ self.get_page_source()
4343
self.get_title()
4444
# Duplicates: self.get_page_title()
4545

46+
self.get_user_agent()
47+
4648
self.go_back()
4749

4850
self.go_forward()

seleniumbase/fixtures/base_case.py

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -423,6 +423,10 @@ def get_title(self):
423423
""" The shorter version of self.get_page_title() """
424424
return self.get_page_title()
425425

426+
def get_user_agent(self):
427+
user_agent = self.driver.execute_script("return navigator.userAgent;")
428+
return user_agent
429+
426430
def go_back(self):
427431
self.__last_page_load_url = None
428432
self.driver.back()
@@ -1186,10 +1190,14 @@ def hover_and_click(self, hover_selector, click_selector,
11861190
outdated_driver = False
11871191
element = None
11881192
try:
1189-
if self.browser == "safari":
1193+
if self.mobile_emulator:
1194+
# On mobile, click to hover the element
1195+
dropdown_element.click()
1196+
elif self.browser == "safari":
11901197
# Use the workaround for hover-clicking on Safari
11911198
raise Exception("This Exception will be caught.")
1192-
page_actions.hover_element(self.driver, dropdown_element)
1199+
else:
1200+
page_actions.hover_element(self.driver, dropdown_element)
11931201
except Exception:
11941202
outdated_driver = True
11951203
element = self.wait_for_element_present(
@@ -1200,8 +1208,12 @@ def hover_and_click(self, hover_selector, click_selector,
12001208
self.open(self.__get_href_from_partial_link_text(
12011209
click_selector))
12021210
else:
1203-
self.js_click(click_selector, click_by)
1204-
if not outdated_driver:
1211+
self.js_click(click_selector, by=click_by)
1212+
if outdated_driver:
1213+
pass # Already did the click workaround
1214+
elif self.mobile_emulator:
1215+
self.click(click_selector, by=click_by)
1216+
elif not outdated_driver:
12051217
element = page_actions.hover_and_click(
12061218
self.driver, hover_selector, click_selector,
12071219
hover_by, click_by, timeout)
@@ -3612,6 +3624,8 @@ def set_messenger_theme(self, theme="default", location="default",
36123624
location = "default" # "bottom_right"
36133625
if not max_messages:
36143626
max_messages = "default" # "8"
3627+
else:
3628+
max_messages = str(max_messages) # Value must be in string format
36153629
js_utils.set_messenger_theme(
36163630
self.driver, theme=theme,
36173631
location=location, max_messages=max_messages)
@@ -5131,6 +5145,11 @@ def setUp(self, masterqa_mode=False):
51315145
if self._reuse_session:
51325146
sb_config.shared_driver = self.driver
51335147

5148+
if self.browser in ["firefox", "ie", "safari"]:
5149+
# Only Chromium-based browsers have the mobile emulator.
5150+
# Some actions such as hover-clicking are different on mobile.
5151+
self.mobile_emulator = False
5152+
51345153
# Configure the test time limit (if used).
51355154
self.set_time_limit(self.time_limit)
51365155

seleniumbase/translate/chinese.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -370,6 +370,10 @@ def 写文字(self, *args, **kwargs):
370370
# write(selector, new_value) # Same as update_text()
371371
return self.write(*args, **kwargs)
372372

373+
def 设置消息主题(self, *args, **kwargs):
374+
# set_messenger_theme(theme="default", location="default")
375+
return self.set_messenger_theme(*args, **kwargs)
376+
373377
def 显示讯息(self, *args, **kwargs):
374378
# post_message(message, duration=None, pause=True, style="info")
375379
return self.post_message(*args, **kwargs)
@@ -410,6 +414,10 @@ def 打开HTML文件(self, *args, **kwargs):
410414
# open_html_file(html_file)
411415
return self.open_html_file(*args, **kwargs)
412416

417+
def 获取用户代理(self, *args, **kwargs):
418+
# get_user_agent()
419+
return self.get_user_agent(*args, **kwargs)
420+
413421

414422
class MasterQA_中文(MasterQA, 硒测试用例):
415423

seleniumbase/translate/dutch.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -370,6 +370,10 @@ def schrijven(self, *args, **kwargs):
370370
# write(selector, new_value) # Same as update_text()
371371
return self.write(*args, **kwargs)
372372

373+
def kenmerk_thema_van_bericht(self, *args, **kwargs):
374+
# set_messenger_theme(theme="default", location="default")
375+
return self.set_messenger_theme(*args, **kwargs)
376+
373377
def bericht_weergeven(self, *args, **kwargs):
374378
# post_message(message, duration=None, pause=True, style="info")
375379
return self.post_message(*args, **kwargs)
@@ -410,6 +414,10 @@ def html_bestand_openen(self, *args, **kwargs):
410414
# open_html_file(html_file)
411415
return self.open_html_file(*args, **kwargs)
412416

417+
def gebruikersagent_ophalen(self, *args, **kwargs):
418+
# get_user_agent()
419+
return self.get_user_agent(*args, **kwargs)
420+
413421

414422
class MasterQA_Nederlands(MasterQA, Testgeval):
415423

seleniumbase/translate/french.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -370,6 +370,10 @@ def écriver(self, *args, **kwargs):
370370
# write(selector, new_value) # Same as update_text()
371371
return self.write(*args, **kwargs)
372372

373+
def définir_thème_du_message(self, *args, **kwargs):
374+
# set_messenger_theme(theme="default", location="default")
375+
return self.set_messenger_theme(*args, **kwargs)
376+
373377
def afficher_message(self, *args, **kwargs):
374378
# post_message(message, duration=None, pause=True, style="info")
375379
return self.post_message(*args, **kwargs)
@@ -410,6 +414,10 @@ def ouvrir_html_fichier(self, *args, **kwargs):
410414
# open_html_file(html_file)
411415
return self.open_html_file(*args, **kwargs)
412416

417+
def obtenir_agent_utilisateur(self, *args, **kwargs):
418+
# get_user_agent()
419+
return self.get_user_agent(*args, **kwargs)
420+
413421

414422
class MasterQA_Français(MasterQA, CasDeBase):
415423

0 commit comments

Comments
 (0)