翼度科技»论坛 编程开发 python 查看内容

显示等待

2

主题

2

帖子

6

积分

新手上路

Rank: 1

积分
6
显示等待

1、导包:
  1. from selenium.webdriver.support.wait import WebDriverWait
  2. from selenium.webdriver.support import expected_conditions as ec
复制代码
2、使用技巧
  1. wait = WebDriverWait(self.driver, 5)
  2. wait.until(ec.text_to_be_present_in_element((by.XPATH, '//*[@id="hasContentDiv"]/div[1]/h2'), '章节列表'))
复制代码
3、源码解析
  1. class WebDriverWait(Generic[D]):
  2.     def __init__(
  3.         self,
  4.         driver: D,   
  5.         timeout: float,  #超时时长
  6.         poll_frequency: float = POLL_FREQUENCY,  #轮询时间间隔
  7.         ignored_exceptions: typing.Optional[WaitExcTypes] = None, #忽略异常
  8.     ):
  9. def until(self, method: Callable[[D], Union[Literal[False], T]], message: str = "") -> T:
  10.     """Calls the method provided with the driver as an argument until the \
  11.     return value does not evaluate to ``False``.
  12.     :param method: callable(WebDriver)
  13.     :param message: optional message for :exc:`TimeoutException`
  14.     :returns: the result of the last call to `method`
  15.     :raises: :exc:`selenium.common.exceptions.TimeoutException` if timeout occurs
  16.     """
  17.     screen = None
  18.     stacktrace = None
  19.     end_time = time.monotonic() + self._timeout
  20.     while True:
  21.         try:
  22.             value = method(self._driver) # 调用传入的方法,有返回值则正常返回
  23.             if value:
  24.                 return value
  25.         except self._ignored_exceptions as exc:
  26.             screen = getattr(exc, "screen", None)
  27.             stacktrace = getattr(exc, "stacktrace", None)
  28.         time.sleep(self._poll) # 出现异常或者无返回值时,等待轮询时间间隔
  29.         if time.monotonic() > end_time:
  30.             break # 达到超时时长,循环结束
  31.     raise TimeoutException(message, screen, stacktrace) # 达到超时时长,抛出异常
  32.    
  33.    
  34. until方法传入可调用对象类型method、异常放回字段message。找到element或者返回true时循环结束。
  35. def until_not(self, method: Callable[[D], T], message: str = "") -> Union[T, Literal[True]]:
  36.     ...
  37. until_not方法功能与until相反。未找到element或者返回false时循环结束。
复制代码
4、until方法入参中常用的method
  1. title_is(title: str)-> Callable[[WebDriver], bool]:标题是某内容
  2. title_contains(title: str)-> Callable[[WebDriver], bool]:标题包含某内容
  3. presence_of_element_located(locator: Tuple[str, str])-> Callable[[WebDriverOrWebElement], WebElement]:元素加载出,传入定位元组,如(By.ID, 'p')
  4. url_contains(url: str) -> Callable[[WebDriver], bool]:当前url是否包含某个字段
  5. url_matches(pattern: str) -> Callable[[WebDriver], bool]:当前url是否包含传入的pattern
  6. url_to_be(url: str) -> Callable[[WebDriver], bool]:当前url是否为传入字段
  7. url_changes(url: str) -> Callable[[WebDriver], bool]:当前url是否不等于传入字段
  8. visibility_of_element_located(
  9.     locator: Tuple[str, str]
  10. ) -> Callable[[WebDriverOrWebElement], Union[Literal[False], WebElement]]:元素可见,传入定位元组
  11. visibility_of(element: WebElement) -> Callable[[Any], Union[Literal[False], WebElement]]:可见,传入元素对象
  12. presence_of_all_elements_located(locator: Tuple[str, str]) -> Callable[[WebDriverOrWebElement], List[WebElement]]:所有元素加载出
  13.    
  14. visibility_of_any_elements_located(locator: Tuple[str, str]) -> Callable[[WebDriverOrWebElement], List[WebElement]]:判断页面至少有一个元素可见 visible,传入locator,一旦定位就返回 the list of located WebElements;不可见(元素隐藏 或是 完全不存在,一个都没有)返回的是 空列表;
  15. 和显式等待结合后, 符合 最少存在一个WebElement的 返回符合定位元素条件WebElement的列表,不可见(元素隐藏 或是 完全不存在的)显式等待+报错;
  16. visibility_of_all_elements_located(
  17.     locator: Tuple[str, str]
  18. ) -> Callable[[WebDriverOrWebElement], Union[List[WebElement], Literal[False]]]:判断页面all elements存在且可见 visible
  19. all elements are present and visible;传入locator,全部符合的 就返回 the list of located and visible WebElements;不能全部符合的返回False;不存在的元素返回 空列表; 和显式等待结合后,符合 全部可见WebElement的 返回符合定位元素条件WebElement的列表,找不到元素的 + WebElement不能全部可见的 显式等待+报错
  20. text_to_be_present_in_element:某个元素文本包含某文字
  21. text_to_be_present_in_element_value:某个元素值包含某文字
  22. text_to_be_present_in_element_attribute(
  23.     locator: Tuple[str, str], attribute_: str, text_: str
  24. ) -> Callable[[WebDriverOrWebElement], bool]:某个元素属性包含某文字
  25. frame_to_be_available_and_switch_to_it(locator: Union[Tuple[str, str], str]) -> Callable[[WebDriver], bool]:frame加载并切换
  26.    
  27. invisibility_of_element_located(
  28.     locator: Union[WebElement, Tuple[str, str]]
  29. ) -> Callable[[WebDriverOrWebElement], Union[WebElement, bool]]:元素是否不可见
  30.    
  31. invisibility_of_element(
  32.     element: Union[WebElement, Tuple[str, str]]
  33. ) -> Callable[[WebDriverOrWebElement], Union[WebElement, bool]]:元素是否不可见
  34.    
  35. element_to_be_clickable(
  36.     mark: Union[WebElement, Tuple[str, str]]
  37. ) -> Callable[[WebDriverOrWebElement], Union[Literal[False], WebElement]]:元素是否可点击
  38.    
  39. staleness_of(element: WebElement) -> Callable[[Any], bool]:判断一个元素是否仍在DOM,可判断页面是否已经刷新
  40.    
  41. element_to_be_selected(element: WebElement) -> Callable[[Any], bool]:元素是否可选择,传元素对象
  42.    
  43. element_located_to_be_selected(locator: Tuple[str, str]) -> Callable[[WebDriverOrWebElement], bool]:元素可选择,传入定位元组
  44.    
  45. element_selection_state_to_be(element: WebElement, is_selected: bool) -> Callable[[Any], bool]:传入元素对象以及状态,相等返回True,否则返回False
  46.    
  47. element_located_selection_state_to_be(
  48.     locator: Tuple[str, str], is_selected: bool
  49. ) -> Callable[[WebDriverOrWebElement], bool]:传入定位元组以及状态,相等返回True,否则返回False
  50.    
  51.    
  52. number_of_windows_to_be(num_windows: int) -> Callable[[WebDriver], bool]:特定窗口数和实际窗口数是否一致
  53.    
  54. new_window_is_opened(current_handles: List[str]) -> Callable[[WebDriver], bool]:新窗口是否打开
  55.    
  56. alert_is_present() -> Callable[[WebDriver], Union[Alert, Literal[False]]]:是否出现Alert
  57.    
  58. element_attribute_to_include(locator: Tuple[str, str], attribute_: str) -> Callable[[WebDriverOrWebElement], bool]:是否包含某个属性
  59.    
  60. any_of(*expected_conditions: Callable[[D], T]) -> Callable[[D], Union[Literal[False], T]]:对多个期望条件中的任何一个为真则为真。
  61.    
  62. all_of(
  63.     *expected_conditions: Callable[[D], Union[T, Literal[False]]]
  64. ) -> Callable[[D], Union[List[T], Literal[False]]]:对多个期望条件中的所有条件为真则为真
  65.    
  66. none_of(*expected_conditions: Callable[[D], Any]) -> Callable[[D], bool]:对多个期望条件中的所有条件为假则为真
复制代码
5、日常用法
可用作元素查找或者断言动作是否生效

来源:https://www.cnblogs.com/PengHwei/p/18126303
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具