APP自动化-显示等待/强制等待/命令等待

本文介绍了Selenium中的显性等待,包括通过页面标题、元素内容判断的等待方式,以及针对下拉框和可点击组件的特殊等待策略。此外,还展示了强制等待(time.sleep())和命令等待(newCommandTimeout)的使用,并提到了等待方式的封装技巧。
摘要由CSDN通过智能技术生成
Selenium显性等待
# 导入库 
from selenium import webdriver 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as ECS 
from selenium.webdriver.common.by import By 
import time 
 
# executable_path 用于指定driver存放路径 
browser = webdriver.Chrome(executable_path='/Users/xx/python/chromedriver') 
 
# 打开京东官网 
browser.get('https://www.baidu.com/') 
 
# 定位要查找的元素 
loc = (By.LINK_TEXT, "关于百度") 
 
try: 
  # 等待5秒,直到发现元素 
    WebDriverWait(driver, 5).until(ECS.presence_of_element_located(loc)) 
except: 
  # 没有发现元素则会打印提示 
    print("没有找到对应元素!") 
finally: 
  # 发现元素则执行下面的方法 
    driver.find_element_by_link_text('关于百度').click() 
 
#退出浏览器 
browser.quit(

知道显性等待怎么用了,接下来我们来看下,还有哪些其他常见的使用方式:

先来个简单的,这里通过页面标题来判断

#元素等待直到能定位到元素,这里是定位到搜索输入框 
#这里定位时不关心元素是否可见,只要是加载到DOM中能定位到即可 
WebDriverWait(driver,3).until(ECS.presence_of_element_located((By.ID,'kw'))) 
 
#元素等待直到能定位到可见的元素,比如这里定位到搜索按钮 
#和上面不同,这里等待的元素除加载DOM中,也必须可见 
WebDriverWait(driver,3).until(ECS.visibility_of_element_located((By.ID,'su'))) 
 
#元素等待直到能定位到可见的元素,比如这里定位到搜索框 
#这个方法和上面 `visibility_of_element_located` 使用类似 
WebDriverWait(driver,3).until(ECS.visibility_of((By.ID,value='su'))) 
 
#元素等待直到通过 `CSS` 定位到至少有一个元素存在,则结束等待 
WebDriverWait(driver,3).until(ECS.presence_of_all_elements_located((By.CSS_SELECTOR,'.uinv'))) 
 
#这和上一个等待方法类似,主要就是需要元素可见才会结束等待 
WebDriverWait(driver,3).until(ECS.visibility_of_any_elements_located((By.CSS_SELECTOR,'.uinv'))) 
 
#元素等待直到元素被加载,可以定位到并且元素必须为不可见状态,才会结束等待 
WebDriverWait(driver,3).until(ECS.invisibility_of_element_located((By.CSS_SELECTOR,'#nwWrap')))```
在平时使用中,也经常会用到等待的元素包含某些内容来判断,而且这种方式能适用很多场景

在平时使用中,也经常会用到等待的元素包含某些内容来判断,而且这种方式能适用很多场景

#元素等待直到定位到指定的元素,并且元素的属性值中包含指定的字符串 
WebDriverWait(driver,3).until(ECS.text_to_be_present_in_element((By.XPATH,"//*[@id='bottom_layer']/div/p[1]/a"),'关于百度')) 
 
#这种实现跟上面效果差不多 
WebDriverWait(driver,3).until(ECS.text_to_be_present_in_element_value((By.CSS_SELECTOR,'#su'),'百度一下')) 

下面几种方式主要是针对下拉框类型的等待,还有可点击的组件,如超链接

#元素等待直到元素被加载,为可见状态,并且是可点击的状态,才会结束等待 
WebDriverWait(driver,3).until(ECS.element_to_be_clickable((By.XPATH,"//*[@id='bottom_layer']/div/p[1]/a"))).click() 
 
#元素等待直到元素被加载,可见状态并且这个元素是被选中的状态 
#这种方式我运用于下拉选择框 
WebDriverWait(driver,3).until(ECS.element_to_be_selected((By.XPATH,"//*[@id='sel']/option[2]"))) 
 
#元素等待直到元素被加载后,并且元素选中状态为预期的状态,才会结束等待 
WebDriverWait(driver,3).until(ECS.element_selection_state_to_be((By.XPATH,"//*[@id='sel']/option[1]"),False)) 

以下是比较特殊的几种方式,在某些情况下用处很大

# 元素等待直到页面加载出现 `alert`,出现自己切换过去并将提示内容返回 
WebDriverWait(driver,3).until(ECS.alert_is_present()) 
 
# 其他都是等待加载元素并操作,这种是等待元素被从Dom中移除时,才会触发结束等待 
WebDriverWait(driver,3).until(ECS.staleness_of(driver.find_element(By.ID,'su'))) 
 
# 这种是页面有多个Frame时,等待页面加载直到 `frame1` 可以切换进去,这时就会自动切换到 `frame1` ,然后结束等待 
WebDriverWait(driver,3).until(ECS.frame_to_be_available_and_switch_to_it(frame1)) 

实例

import random
from appium import webdriver
'''
导入显性等待模块
'''
from selenium.webdriver.support.wait import  WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

from appium import webdriver
from appium.webdriver.common.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小六妹妹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值