app自动化-等待机制-显性等待

显性等待
显性等待是每次都需要调用的一种等待类型,它有多种使用方式;
 
总结
显性等待是一种条件(ec模块里面的条件)等待,其原理是:
首先引入服务包:
from selenium.webdriver.support.wait import WebDriverWait   # 引入selenium的服务
from selenium.webdriver.support import expected_conditions as ec   # 引入预期条件ec模块的服务包
wait = WebDriverWait(driver, 2)  # WebDriverWait(driver, n)  n采用2、5、8原则
locator = (by.XPATH, '//androidx.appcompat.app.ActionBar.Tab[@content-desc="书城"]')  # locator是复合型数据,元组
wait.until(ec.visibility_of_element_located(locator)).click()    # 进入书城--这里的.click()不会自动带出来,如果要带出来,需要在源码中定义声明
#  from appium.webdriver.webelement import WebElement as MobileWebElement  # 这里是从find_element函数中的源码中找到了

函数中找到声明MobileWebElement,点击MobileWebElement声明找到源码webelement中找到find_element函数对应的声明-> 'WebElement',所以从webdriverd import包列表中得到路径:
from .webelement import WebElement as MobileWebElement
#  在要调用的函数后面(这里是用的until函数)声明MobileWebElement,即在:号里面添加 -> MobileWebElement,

 

 

 

 
wait.until(ec.visibility_of(i)).click()    # ec.visibility_of 返回一个元素为可见,
 
构建一个循环,在循环内,当条件成立(unit)或不成立(unit_not)时的一种包含着代码运行过程的异常捕捉的循环等待方式;
 
常用的几种ec模块的内容:
presence_of_element_located           底层就是用的find_element,所以它也只是对加载的等待。(存在等待)
presence_of_all_elements_located   这个是找所有元素,所有元素都能找到就行。(存在等待)
visibility_of_element_located             底层是元素的显示属性的等待,所以它是包含了对渲染的结果的等待。(显示等待)---建议使用---接受的是 定位元素和定位方式的元组,不接受元素对象
visibility_of_all_elements_located     这个是找所有元素,所有元素都要是显示出来的才行。(显示等待)---建议使用
visibility_of_any_elements_located   这个是找所有元素,所有元素中有一个显示了就行。(部分显示等待)---建议使用
ec.element_to_be_clickable     这个是找即存在又可以被点击(被启用)的元素,是确认元素是否是可点击的;接受的是 定位元素和定位方式的元组,也接受元素对象

 这里寻找元素 elements 是一个元素列表

elements[1] 这里取的是一个元素对象;

所以只能使用ec.element_to_be_clickable

 

 

posted @ 2023-05-09 11:12  琉璃星眸  阅读(40)  评论(0编辑  收藏  举报