首页 > 其他分享 >显示等待

显示等待

时间:2024-04-10 16:35:43浏览次数:19  
标签:WebElement 显示 Union element Callable bool str 等待

显示等待

1、导包:

from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec

2、使用技巧

wait = WebDriverWait(self.driver, 5)
wait.until(ec.text_to_be_present_in_element((by.XPATH, '//*[@id="hasContentDiv"]/div[1]/h2'), '章节列表'))

3、源码解析

class WebDriverWait(Generic[D]):
    def __init__(
        self,
        driver: D,   
        timeout: float,  #超时时长
        poll_frequency: float = POLL_FREQUENCY,  #轮询时间间隔
        ignored_exceptions: typing.Optional[WaitExcTypes] = None, #忽略异常
    ):




def until(self, method: Callable[[D], Union[Literal[False], T]], message: str = "") -> T:
    """Calls the method provided with the driver as an argument until the \
    return value does not evaluate to ``False``.

    :param method: callable(WebDriver)
    :param message: optional message for :exc:`TimeoutException`
    :returns: the result of the last call to `method`
    :raises: :exc:`selenium.common.exceptions.TimeoutException` if timeout occurs
    """
    screen = None
    stacktrace = None

    end_time = time.monotonic() + self._timeout
    while True:
        try:
            value = method(self._driver) # 调用传入的方法,有返回值则正常返回
            if value:
                return value
        except self._ignored_exceptions as exc:
            screen = getattr(exc, "screen", None)
            stacktrace = getattr(exc, "stacktrace", None)
        time.sleep(self._poll) # 出现异常或者无返回值时,等待轮询时间间隔
        if time.monotonic() > end_time:
            break # 达到超时时长,循环结束
    raise TimeoutException(message, screen, stacktrace) # 达到超时时长,抛出异常
    
    
until方法传入可调用对象类型method、异常放回字段message。找到element或者返回true时循环结束。

def until_not(self, method: Callable[[D], T], message: str = "") -> Union[T, Literal[True]]:
    ...
until_not方法功能与until相反。未找到element或者返回false时循环结束。

4、until方法入参中常用的method

title_is(title: str)-> Callable[[WebDriver], bool]:标题是某内容

title_contains(title: str)-> Callable[[WebDriver], bool]:标题包含某内容

presence_of_element_located(locator: Tuple[str, str])-> Callable[[WebDriverOrWebElement], WebElement]:元素加载出,传入定位元组,如(By.ID, 'p')

url_contains(url: str) -> Callable[[WebDriver], bool]:当前url是否包含某个字段

url_matches(pattern: str) -> Callable[[WebDriver], bool]:当前url是否包含传入的pattern

url_to_be(url: str) -> Callable[[WebDriver], bool]:当前url是否为传入字段

url_changes(url: str) -> Callable[[WebDriver], bool]:当前url是否不等于传入字段

visibility_of_element_located(
    locator: Tuple[str, str]
) -> Callable[[WebDriverOrWebElement], Union[Literal[False], WebElement]]:元素可见,传入定位元组

visibility_of(element: WebElement) -> Callable[[Any], Union[Literal[False], WebElement]]:可见,传入元素对象

presence_of_all_elements_located(locator: Tuple[str, str]) -> Callable[[WebDriverOrWebElement], List[WebElement]]:所有元素加载出
    
visibility_of_any_elements_located(locator: Tuple[str, str]) -> Callable[[WebDriverOrWebElement], List[WebElement]]:判断页面至少有一个元素可见 visible,传入locator,一旦定位就返回 the list of located WebElements;不可见(元素隐藏 或是 完全不存在,一个都没有)返回的是 空列表;
和显式等待结合后, 符合 最少存在一个WebElement的 返回符合定位元素条件WebElement的列表,不可见(元素隐藏 或是 完全不存在的)显式等待+报错;

visibility_of_all_elements_located(
    locator: Tuple[str, str]
) -> Callable[[WebDriverOrWebElement], Union[List[WebElement], Literal[False]]]:判断页面all elements存在且可见 visible
all elements are present and visible;传入locator,全部符合的 就返回 the list of located and visible WebElements;不能全部符合的返回False;不存在的元素返回 空列表; 和显式等待结合后,符合 全部可见WebElement的 返回符合定位元素条件WebElement的列表,找不到元素的 + WebElement不能全部可见的 显式等待+报错

text_to_be_present_in_element:某个元素文本包含某文字

text_to_be_present_in_element_value:某个元素值包含某文字

text_to_be_present_in_element_attribute(
    locator: Tuple[str, str], attribute_: str, text_: str
) -> Callable[[WebDriverOrWebElement], bool]:某个元素属性包含某文字

frame_to_be_available_and_switch_to_it(locator: Union[Tuple[str, str], str]) -> Callable[[WebDriver], bool]:frame加载并切换
    
invisibility_of_element_located(
    locator: Union[WebElement, Tuple[str, str]]
) -> Callable[[WebDriverOrWebElement], Union[WebElement, bool]]:元素是否不可见
    
invisibility_of_element(
    element: Union[WebElement, Tuple[str, str]]
) -> Callable[[WebDriverOrWebElement], Union[WebElement, bool]]:元素是否不可见
    
element_to_be_clickable(
    mark: Union[WebElement, Tuple[str, str]]
) -> Callable[[WebDriverOrWebElement], Union[Literal[False], WebElement]]:元素是否可点击
    
staleness_of(element: WebElement) -> Callable[[Any], bool]:判断一个元素是否仍在DOM,可判断页面是否已经刷新
    
element_to_be_selected(element: WebElement) -> Callable[[Any], bool]:元素是否可选择,传元素对象
    
element_located_to_be_selected(locator: Tuple[str, str]) -> Callable[[WebDriverOrWebElement], bool]:元素可选择,传入定位元组

    
element_selection_state_to_be(element: WebElement, is_selected: bool) -> Callable[[Any], bool]:传入元素对象以及状态,相等返回True,否则返回False
    
element_located_selection_state_to_be(
    locator: Tuple[str, str], is_selected: bool
) -> Callable[[WebDriverOrWebElement], bool]:传入定位元组以及状态,相等返回True,否则返回False
    
    
number_of_windows_to_be(num_windows: int) -> Callable[[WebDriver], bool]:特定窗口数和实际窗口数是否一致
    
new_window_is_opened(current_handles: List[str]) -> Callable[[WebDriver], bool]:新窗口是否打开 
    
alert_is_present() -> Callable[[WebDriver], Union[Alert, Literal[False]]]:是否出现Alert
    
element_attribute_to_include(locator: Tuple[str, str], attribute_: str) -> Callable[[WebDriverOrWebElement], bool]:是否包含某个属性
    
any_of(*expected_conditions: Callable[[D], T]) -> Callable[[D], Union[Literal[False], T]]:对多个期望条件中的任何一个为真则为真。
    
all_of(
    *expected_conditions: Callable[[D], Union[T, Literal[False]]]
) -> Callable[[D], Union[List[T], Literal[False]]]:对多个期望条件中的所有条件为真则为真
    
none_of(*expected_conditions: Callable[[D], Any]) -> Callable[[D], bool]:对多个期望条件中的所有条件为假则为真

5、日常用法

可用作元素查找或者断言动作是否生效

标签:WebElement,显示,Union,element,Callable,bool,str,等待
From: https://www.cnblogs.com/PengHwei/p/18126303

相关文章

  • ETOP05-0045 UNIOP意大利触摸屏触摸失控维修HMI人机界面UNIOP深圳捷达工控维修ETOP504
    UniOP通用操作面板只有在采取特殊措施以确保符合EN61000-6-3的情况下,才允许将这些设备安装到住宅、商业和轻工业环境中。该产品可以通过附在后盖上的铭牌来识别。您必须知道您所使用的设备类型才能正确使用指南中包含的信息。安装环境该设备不适合连续暴露在阳光直射......
  • VK2C24抗干扰/抗噪/高稳定性LCD屏显示驱动段码屏IC
    VK2C24是一个点阵式存储映射的LCD驱动器,可支持最大288点(72SEGx4COM)或者最大544点(68SEGx8COM)或者最大960点(60SEGx16COM)的LCD屏。单片机可通过I2C接口配置显示参数和读写显示数据,也可通过指令进入省电模式。其高抗干扰,低功耗的特性适用于水电气表以及工控仪表类产品。L23+01特点:•......
  • uview2.0版本,h5内网,无网络下icon图标不显示
    在项目目录下找到/node_modules/uview-ui/components/u-icon/u-icon.vue路径的文件由其中的代码片段可知,官方使用的是阿里云图标库的线上库,浏览器访问https://at.alicdn.com/t/font_2225171_8kdcwk4po24.ttf这个地址,下载字体文件放到本地的static文件目录下然后将u-icon.vue......
  • 英雄联盟显示缺失vsddrv.dll无法继续怎么解决?英雄联盟vsddrv.dll丢失深入修复指南
    在《英雄联盟》(LeagueofLegends,简称LOL)中遇到提示“缺失vsddrv.dll”文件导致游戏无法继续的情况,很多玩家都不知道应该怎么解决?下面一起来看看相关的原因及解决方法介绍吧!一、原因系统文件损坏:操作系统在使用过程中,可能会出现文件损坏的情况,导致dll文件缺失。软件卸载不......
  • 2-52. 随着时间变化刷新地图显示内容
    本节目标之间实现了在地上挖坑和浇水,但是我们进入房间再出来之后就什么都没有了所以本节需要保存这些挖坑和浇水的信息修改GridMapManager给第二个场景挂载地图信息然后赋值MapData以及选择对应的GridType绘制可以扔东西的层还要把MapData_Home改成对应的场......
  • antd popover组件二次封装children显示
    importReact,{PropsWithChildren}from'react';import'./index.scss';import{Popover}from'antd';exportinterfaceDictPopoverCompProps{open:boolean;keyWords:string;}//词库联想气泡constDictPopoverComp=(prop......
  • vue canvas绘制信令图,动态显示标题、宽度、高度
    需求:1、 根据后端返回的数据,动态绘制出信令图2、根据 dataStatus返回值:0和1,判断文字内容的颜色,0:#000,1:red3.、根据lineType 返回值:0和1, 判断箭头线的显示是实线、虚线4、根据返回的文字内容的换行符:“\r\n”自动换行(这步比较难,得计算高度)最后的效果图大......
  • 数码相框-bmp图标显示
    bmp图片格式的解析参考资料:bmp格式分析‍位图文件主要分为如下3个部分:块名称对应Windows结构体定义大小(Byte)文件信息头BITMAPFILEHEADER14位图信息头BITMAPINFOHEADER40RGB颜色阵列BYTE*由图像长宽尺寸决定1、文件信息头BITMAPFILEHEADER结......
  • 数码管显示屏驱动芯片VK1640 SOP28,2线串行接口,适用于小型LED显示屏驱动
    产品品牌:永嘉微电/VINKA产品型号:VK1640封装形式:SOP28概述VK1640是一种数码管或点阵LED驱动控制专用芯片,内部集成有数据锁存器、LED驱动等电路。SEG脚接LED阳极,GRID脚接LED阴极,可支持8SEGx16GRID的点阵LED显示。适用于小型LED显示屏驱动。采用SOP28的封装形式。LJQ336特点•......
  • vue element 显示 base64格式图片
     <el-imagestyle="width:300px;height:150px":src="url":preview-src-list="srcList"></el-image>this.url='data:image/png;base64,'+row.PAGE_IMG其他格式data:,文本数据data:text/plain,......