Add methods and update UC Mode
This commit is contained in:
parent
5bd9f74990
commit
dc86046193
|
@ -370,6 +370,8 @@ self.highlight_type(selector, text, by="css selector", loops=3, scroll=True, tim
|
||||||
# self.highlight_update_text(
|
# self.highlight_update_text(
|
||||||
# selector, text, by="css selector", loops=3, scroll=True, timeout=None)
|
# selector, text, by="css selector", loops=3, scroll=True, timeout=None)
|
||||||
|
|
||||||
|
self.highlight_if_visible(selector, by="css selector", loops=4, scroll=True)
|
||||||
|
|
||||||
self.highlight(selector, by="css selector", loops=4, scroll=True, timeout=None)
|
self.highlight(selector, by="css selector", loops=4, scroll=True, timeout=None)
|
||||||
|
|
||||||
self.press_up_arrow(selector="html", times=1, by="css selector")
|
self.press_up_arrow(selector="html", times=1, by="css selector")
|
||||||
|
@ -742,6 +744,7 @@ self.generate_traffic_chain(pages, loops=1)
|
||||||
|
|
||||||
self.get_element(selector, by="css selector", timeout=None)
|
self.get_element(selector, by="css selector", timeout=None)
|
||||||
# Duplicates:
|
# Duplicates:
|
||||||
|
# self.wait_for_selector(selector, by="css selector", timeout=None)
|
||||||
# self.locator(selector, by="css selector", timeout=None)
|
# self.locator(selector, by="css selector", timeout=None)
|
||||||
# self.wait_for_element_present(selector, by="css selector", timeout=None)
|
# self.wait_for_element_present(selector, by="css selector", timeout=None)
|
||||||
|
|
||||||
|
@ -957,6 +960,12 @@ driver.assert_exact_text(text, selector)
|
||||||
|
|
||||||
driver.wait_for_element(selector)
|
driver.wait_for_element(selector)
|
||||||
|
|
||||||
|
driver.wait_for_element_visible(selector)
|
||||||
|
|
||||||
|
driver.wait_for_element_present(selector)
|
||||||
|
|
||||||
|
driver.wait_for_selector(selector)
|
||||||
|
|
||||||
driver.wait_for_text(text, selector)
|
driver.wait_for_text(text, selector)
|
||||||
|
|
||||||
driver.wait_for_exact_text(text, selector)
|
driver.wait_for_exact_text(text, selector)
|
||||||
|
@ -991,6 +1000,8 @@ driver.highlight(selector)
|
||||||
|
|
||||||
driver.highlight_click(selector)
|
driver.highlight_click(selector)
|
||||||
|
|
||||||
|
driver.highlight_if_visible(selector)
|
||||||
|
|
||||||
driver.sleep(seconds)
|
driver.sleep(seconds)
|
||||||
|
|
||||||
driver.locator(selector)
|
driver.locator(selector)
|
||||||
|
@ -1015,6 +1026,10 @@ driver.uc_open_with_reconnect(url, reconnect_time=None)
|
||||||
|
|
||||||
driver.reconnect(timeout)
|
driver.reconnect(timeout)
|
||||||
|
|
||||||
|
driver.disconnect()
|
||||||
|
|
||||||
|
driver.connect()
|
||||||
|
|
||||||
driver.uc_click(
|
driver.uc_click(
|
||||||
selector, by="css selector",
|
selector, by="css selector",
|
||||||
timeout=settings.SMALL_TIMEOUT, reconnect_time=None)
|
timeout=settings.SMALL_TIMEOUT, reconnect_time=None)
|
||||||
|
|
|
@ -169,6 +169,9 @@ def extend_driver(driver):
|
||||||
driver.assert_text = DM.assert_text
|
driver.assert_text = DM.assert_text
|
||||||
driver.assert_exact_text = DM.assert_exact_text
|
driver.assert_exact_text = DM.assert_exact_text
|
||||||
driver.wait_for_element = DM.wait_for_element
|
driver.wait_for_element = DM.wait_for_element
|
||||||
|
driver.wait_for_element_visible = DM.wait_for_element_visible
|
||||||
|
driver.wait_for_element_present = DM.wait_for_element_present
|
||||||
|
driver.wait_for_selector = DM.wait_for_selector
|
||||||
driver.wait_for_text = DM.wait_for_text
|
driver.wait_for_text = DM.wait_for_text
|
||||||
driver.wait_for_exact_text = DM.wait_for_exact_text
|
driver.wait_for_exact_text = DM.wait_for_exact_text
|
||||||
driver.wait_for_and_accept_alert = DM.wait_for_and_accept_alert
|
driver.wait_for_and_accept_alert = DM.wait_for_and_accept_alert
|
||||||
|
@ -186,6 +189,7 @@ def extend_driver(driver):
|
||||||
driver.get_user_agent = DM.get_user_agent
|
driver.get_user_agent = DM.get_user_agent
|
||||||
driver.highlight = DM.highlight
|
driver.highlight = DM.highlight
|
||||||
driver.highlight_click = DM.highlight_click
|
driver.highlight_click = DM.highlight_click
|
||||||
|
driver.highlight_if_visible = DM.highlight_if_visible
|
||||||
driver.sleep = time.sleep
|
driver.sleep = time.sleep
|
||||||
driver.get_attribute = DM.get_attribute
|
driver.get_attribute = DM.get_attribute
|
||||||
driver.get_page_source = DM.get_page_source
|
driver.get_page_source = DM.get_page_source
|
||||||
|
@ -458,27 +462,34 @@ def uc_click(
|
||||||
by = "css selector"
|
by = "css selector"
|
||||||
except Exception:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
element = driver.wait_for_element(selector, by=by, timeout=timeout)
|
element = driver.wait_for_selector(selector, by=by, timeout=timeout)
|
||||||
|
if not element.tag_name == "span": # Element must be "visible"
|
||||||
|
element = driver.wait_for_element(selector, by=by, timeout=timeout)
|
||||||
try:
|
try:
|
||||||
element.uc_click(
|
element.uc_click(
|
||||||
driver, selector, by=by, reconnect_time=reconnect_time
|
driver, selector, by=by, reconnect_time=reconnect_time
|
||||||
)
|
)
|
||||||
except ElementClickInterceptedException:
|
except ElementClickInterceptedException:
|
||||||
|
time.sleep(0.16)
|
||||||
driver.js_click(selector, by=by, timeout=timeout)
|
driver.js_click(selector, by=by, timeout=timeout)
|
||||||
|
if not reconnect_time:
|
||||||
|
driver.reconnect(0.1)
|
||||||
|
else:
|
||||||
|
driver.reconnect(reconnect_time)
|
||||||
|
|
||||||
|
|
||||||
def uc_switch_to_frame(driver, frame, reconnect_time=None):
|
def uc_switch_to_frame(driver, frame, reconnect_time=None):
|
||||||
from selenium.webdriver.remote.webelement import WebElement
|
from selenium.webdriver.remote.webelement import WebElement
|
||||||
if isinstance(frame, WebElement):
|
if isinstance(frame, WebElement):
|
||||||
if not reconnect_time:
|
if not reconnect_time:
|
||||||
driver.reconnect(0.15)
|
driver.reconnect(0.1)
|
||||||
else:
|
else:
|
||||||
driver.reconnect(reconnect_time)
|
driver.reconnect(reconnect_time)
|
||||||
driver.switch_to.frame(frame)
|
driver.switch_to.frame(frame)
|
||||||
else:
|
else:
|
||||||
iframe = driver.locator(frame)
|
iframe = driver.locator(frame)
|
||||||
if not reconnect_time:
|
if not reconnect_time:
|
||||||
driver.reconnect(0.15)
|
driver.reconnect(0.1)
|
||||||
else:
|
else:
|
||||||
driver.reconnect(reconnect_time)
|
driver.reconnect(reconnect_time)
|
||||||
driver.switch_to.frame(iframe)
|
driver.switch_to.frame(iframe)
|
||||||
|
|
|
@ -97,6 +97,15 @@ class DriverMethods():
|
||||||
def wait_for_element(self, *args, **kwargs):
|
def wait_for_element(self, *args, **kwargs):
|
||||||
return page_actions.wait_for_element(self.driver, *args, **kwargs)
|
return page_actions.wait_for_element(self.driver, *args, **kwargs)
|
||||||
|
|
||||||
|
def wait_for_element_visible(self, *args, **kwargs):
|
||||||
|
return page_actions.wait_for_element(self.driver, *args, **kwargs)
|
||||||
|
|
||||||
|
def wait_for_element_present(self, *args, **kwargs):
|
||||||
|
return page_actions.wait_for_selector(self.driver, *args, **kwargs)
|
||||||
|
|
||||||
|
def wait_for_selector(self, *args, **kwargs):
|
||||||
|
return page_actions.wait_for_selector(self.driver, *args, **kwargs)
|
||||||
|
|
||||||
def wait_for_text(self, *args, **kwargs):
|
def wait_for_text(self, *args, **kwargs):
|
||||||
return page_actions.wait_for_text(self.driver, *args, **kwargs)
|
return page_actions.wait_for_text(self.driver, *args, **kwargs)
|
||||||
|
|
||||||
|
@ -147,6 +156,8 @@ class DriverMethods():
|
||||||
return js_utils.get_user_agent(self.driver, *args, **kwargs)
|
return js_utils.get_user_agent(self.driver, *args, **kwargs)
|
||||||
|
|
||||||
def highlight(self, *args, **kwargs):
|
def highlight(self, *args, **kwargs):
|
||||||
|
if "scroll" in kwargs:
|
||||||
|
kwargs.pop("scroll")
|
||||||
w_args = kwargs.copy()
|
w_args = kwargs.copy()
|
||||||
if "loops" in w_args:
|
if "loops" in w_args:
|
||||||
w_args.pop("loops")
|
w_args.pop("loops")
|
||||||
|
@ -161,8 +172,16 @@ class DriverMethods():
|
||||||
self.highlight(*args, **kwargs)
|
self.highlight(*args, **kwargs)
|
||||||
if "loops" in kwargs:
|
if "loops" in kwargs:
|
||||||
kwargs.pop("loops")
|
kwargs.pop("loops")
|
||||||
|
if "scroll" in kwargs:
|
||||||
|
kwargs.pop("scroll")
|
||||||
page_actions.click(self.driver, *args, **kwargs)
|
page_actions.click(self.driver, *args, **kwargs)
|
||||||
|
|
||||||
|
def highlight_if_visible(
|
||||||
|
self, selector, by="css selector", loops=4, scroll=True
|
||||||
|
):
|
||||||
|
if self.is_element_visible(selector, by=by):
|
||||||
|
self.highlight(selector, by=by, loops=loops, scroll=scroll)
|
||||||
|
|
||||||
def switch_to_frame(self, frame):
|
def switch_to_frame(self, frame):
|
||||||
if isinstance(frame, WebElement):
|
if isinstance(frame, WebElement):
|
||||||
self.driver.switch_to.frame(frame)
|
self.driver.switch_to.frame(frame)
|
||||||
|
|
|
@ -5601,6 +5601,14 @@ class BaseCase(unittest.TestCase):
|
||||||
self.__highlight(selector, by=by, loops=loops, scroll=scroll)
|
self.__highlight(selector, by=by, loops=loops, scroll=scroll)
|
||||||
self.update_text(selector, text, by=by)
|
self.update_text(selector, text, by=by)
|
||||||
|
|
||||||
|
def highlight_if_visible(
|
||||||
|
self, selector, by="css selector", loops=4, scroll=True,
|
||||||
|
):
|
||||||
|
"""Highlights the element if the element is visible."""
|
||||||
|
self.__check_scope()
|
||||||
|
if self.is_element_visible(selector, by=by):
|
||||||
|
self.__highlight(selector, by=by, loops=loops, scroll=scroll)
|
||||||
|
|
||||||
def __highlight(
|
def __highlight(
|
||||||
self, selector, by="css selector", loops=None, scroll=True
|
self, selector, by="css selector", loops=None, scroll=True
|
||||||
):
|
):
|
||||||
|
@ -9089,6 +9097,11 @@ class BaseCase(unittest.TestCase):
|
||||||
The element does not need be visible (it may be hidden)."""
|
The element does not need be visible (it may be hidden)."""
|
||||||
return self.wait_for_element_present(selector, by=by, timeout=timeout)
|
return self.wait_for_element_present(selector, by=by, timeout=timeout)
|
||||||
|
|
||||||
|
def wait_for_selector(self, selector, by="css selector", timeout=None):
|
||||||
|
"""Same as wait_for_element_present() - returns the element.
|
||||||
|
The element does not need be visible (it may be hidden)."""
|
||||||
|
return self.wait_for_element_present(selector, by=by, timeout=timeout)
|
||||||
|
|
||||||
def wait_for_query_selector(
|
def wait_for_query_selector(
|
||||||
self, selector, by="css selector", timeout=None
|
self, selector, by="css selector", timeout=None
|
||||||
):
|
):
|
||||||
|
|
|
@ -1752,6 +1752,27 @@ def wait_for_element(
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def wait_for_selector(
|
||||||
|
driver,
|
||||||
|
selector,
|
||||||
|
by="css selector",
|
||||||
|
timeout=settings.LARGE_TIMEOUT,
|
||||||
|
):
|
||||||
|
original_selector = None
|
||||||
|
if page_utils.is_valid_by(by):
|
||||||
|
original_selector = selector
|
||||||
|
elif page_utils.is_valid_by(selector):
|
||||||
|
original_selector = by
|
||||||
|
selector, by = page_utils.recalculate_selector(selector, by)
|
||||||
|
return wait_for_element_present(
|
||||||
|
driver=driver,
|
||||||
|
selector=selector,
|
||||||
|
by=by,
|
||||||
|
timeout=timeout,
|
||||||
|
original_selector=original_selector,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def wait_for_text(
|
def wait_for_text(
|
||||||
driver,
|
driver,
|
||||||
text,
|
text,
|
||||||
|
|
|
@ -442,6 +442,28 @@ class Chrome(selenium.webdriver.chrome.webdriver.WebDriver):
|
||||||
except Exception:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
def disconnect(self):
|
||||||
|
"""Stops the chromedriver service that runs in the background.
|
||||||
|
To use driver methods again, you MUST call driver.connect()"""
|
||||||
|
if hasattr(self, "service"):
|
||||||
|
try:
|
||||||
|
self.service.stop()
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
|
||||||
|
def connect(self):
|
||||||
|
"""Starts the chromedriver service that runs in the background
|
||||||
|
and recreates the session."""
|
||||||
|
if hasattr(self, "service"):
|
||||||
|
try:
|
||||||
|
self.service.start()
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
try:
|
||||||
|
self.start_session()
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
|
||||||
def start_session(self, capabilities=None):
|
def start_session(self, capabilities=None):
|
||||||
if not capabilities:
|
if not capabilities:
|
||||||
capabilities = self.options.to_capabilities()
|
capabilities = self.options.to_capabilities()
|
||||||
|
|
Loading…
Reference in New Issue