首页 > 其他分享 >web自动化--等待

web自动化--等待

时间:2023-02-27 20:33:32浏览次数:45  
标签:web -- selenium 元素 driver element located 自动化 import

一、常用知识:

一、强制等待
time.sleep(3)

二、隐式等待
语法:driver.implicitly_wait(s)
1、整个会话只执行一次,全局起作用,后面的每一次元素查找都会进行等待,在设置的时间内元素找到就执行下一行代码,元素未找到就会报错

三、显式等待(等待[WebDriverWait]+条件[expected_conditions])
1、导包
from selenium.webdriver.support.wait import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC

2、WebDriverWait参数说明
    2.1、timeout:最长超时时间,默认以秒为单位
    2.2、poll_frequency:轮询频率,检测的间隔步长,默认为0.5s,这里会每隔 0.5 秒调用一次 method 的临时函数
    2.3、ignored_exceptions:超时后的抛出的异常信息,默认抛出NoSuchElementExeception异常。

3.until()结合使用
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
"写法一:分开写"
"等待,默认0.5秒检查一次元素是否出现"
"等待条件为找到某个元素结合until使用"
wait = WebDriverWait(driver=drive,timeout=10)
element_locator = (By.XPATH,'//div[@id="kw"]')
element = wait.until(EC.visibility_of_element_located(locator=element_locator))

"写法二:组合写法"
EC.presence_of_element_located():元素存在的位置
element=WebDriverWait(driver=driver,timeout=10,poll_frequency=1).until(EC.presence_of_element_located((By.ID,'//div[@class="target_id"')))

"等待多个元素出现"
wait = WebDriverWait(driver=drive,timeout=10)
wait.until(EC.visibility_of_all_elements_located(locator=location))
  
4、until_not()结合使用

5、expected_conditions结合使用


四、from selenium.webdriver.support import expected_conditions类
https://www.cnblogs.com/surewing/p/9639855.html
"常用"
1、visibility_of_element_located : 判断某个元素是否可见. 可见代表元素非隐藏,并且元素的宽和高都不等于0
2、visibility_of_all_elements_located:判断多个元素是否可见,可见代表元素非隐藏,并且元素的宽和高都不等于0
3、visibility_of :跟上面的方法做一样的事情,只是上面的方法要传入locator,这个方法直接传定位到的element就好了
4、frame_to_be_available_and_switch_to_it : 判断该frame是否可以switch进去,如果可以的话,返回True并且switch进去,否则返回False
5、alert_is_present : 判断页面上是否存在alert
6、element_to_be_selected:判断某个元素是否被选中了,一般用在下拉列表
7、element_to_be_clickable : 判断某个元素中是否可见并且是enable的,这样的话才叫clickable
8、presence_of_element_located: 判断某个元素是否被加到了dom树里,【并不代表该元素一定可见】
9、presence_of_all_elements_located : 等待所有元素存在dom树中【并不代表该元素一定可见】
    
    
"不常用"  
6、title_is:判断当前页面的title是否完全等于(==)预期字符串,返回是布尔值
7、title_contains 判断当前页面的title是否包含预期字符串,返回布尔值
8、text_to_be_present_in_element : 判断某个元素中的text是否包含了预期的字符串
9、text_to_be_present_in_element_value:判断某个元素中的value属性是否包含了预期的字符串
10、invisibility_of_element_located : 判断某个元素中是否不存在于dom树或不可见
11、staleness_of :等某个元素从dom树中移除,注意,这个方法也是返回True或False
12、element_selection_state_to_be:判断某个元素的选中状态是否符合预期
13、element_located_selection_state_to_be:跟上面的方法作用一样,只是上面的方法传入定位到的element,而这个方法传入locator
"""

二、测试代码:

# 导入selenium包
from selenium import webdriver
from time import sleep

from selenium.webdriver.common.by  import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 打开一个浏览器
# 1、启动chromedriver驱动程序
# 2、通过驱动程序,与chrome之间创建一个会话(会话Id)。打开chrome浏览器。
driver = webdriver.Chrome()

#调整为最大窗口:
driver.maximize_window()

#打开百度地址
driver.get("https://www.baidu.com/")

# id
# element=driver.find_element(By.ID,"kw")
# print(element)

element = driver.find_element(By.XPATH,'//input[@id="kw"]')
print(element)

#点击操作
element.click()
#输入操作
element.send_keys("陈然")
#点击百度按钮查询
element1 =driver.find_element(By.ID,"su")
element1.click()
sleep(3)
#获取元素的标签名
print(element.tag_name)
#获取元素的value属性
print(element.get_attribute("value"))
#获取元素的文本内容
print(element.text)
#将元素滚动到可见区域
print(element.location_once_scrolled_into_view)

#判断元素是否被选中
print(element.is_selected())
#判断元素是否已启用
print(element.is_enabled())
#判断元素是否对用户可见
print(element.is_displayed())

#元素存在:页面存在
#元素可见:元素在页面上占据一定的大小
#元素可用:按钮置灰(不可用)



#1.强制等待(把握不了等待的时间)
sleep
#2.隐性等待(implicitly_wait) -智能等待(全局作用)
#在等待时间内元素找到了就不再等待,如果没找到就抛出异常  --等待元素,driver.find_element
driver.implicitly_wait(10)
#3.显性等待  -智能等待
#等待时间内任何条件成立了就不再等待,超出时间没找到就抛出异常
loc=(By.XPATH,'//input[@id="kw"]')
EC.visibility_of_any_elements_located(loc)
#结合起来使用场景:
WebDriverWait(driver,10).until(EC.visibility_of_any_elements_located(loc))
#不成立场景:
WebDriverWait(driver, 10).until_not()

sleep(3)
driver.quit()

 

标签:web,--,selenium,元素,driver,element,located,自动化,import
From: https://www.cnblogs.com/crdhm12040605/p/17161779.html

相关文章

  • 抽象类和接口
    昨天做个功能,突然想到了用抽象类和接口哪个好。只用接口可以么,为什么要用抽象类当然可以,用类+接口的方式完全可以实现抽象类的功能。抽象类最大的作用是复用,共性的属性或者......
  • xx-job的使用
    xx-job是一个分布式任务调度平台。使用流程为:1、执行sql2、启动admin项目3、先有项目是执行器,集成进xx-job其他xx-job地址github地址:​​​https://github.com/xuxueli/......
  • 2023.2.27每日总结
    今天课堂练习代码如下packagektlx01;importjava.io.BufferedReader;importjava.io.File;importjava.io.FileReader;importjava.io.FileWriter;importjava.io.IOExc......
  • django多表查询
      注意事项: 表的名称myapp_modelName,是根据模型中的元数据自动生成的,也可以覆写为别的名称 id 字段是自动添加的 对于外键字段,Django会在字段名上添加"......
  • 磁盘的传输速度
    u盘传输速度这么慢。可能是用的usb2.0的口,同一个主板,可能有3.0有2.0,不同端口速度不一样。传输原理不同,usb2.0理论最大速度60M,实际可能也就不到30.usb3.0理论最大500M,实......
  • 使用redis锁还是出现同步问题
    一种可能是,2台机器同时访问,一台访问,还没有把锁设置过去的时候,另一台也查不到就会出现这个问题。解决方法这我跟写代码的方式有关。先查,如果不存在就set,这种方式有极微小的可......
  • Access-Control-Allow- 跨域CORS 的使用
    cors是什么cross-originresourcesharing跨域资源共享。示例:response.setHeader("Access-Control-Allow-Origin","*");response.setHeader("Access-Control-Allow-Metho......
  • 笔记本锁屏之后网络会断掉
    场景笔记本一段时间不用会锁屏,锁屏之后一段时间网络就会断掉。例如我们要上传一个大项目文件,睡觉前开始传,到第二天发现网断了,传输失败,尴尬。解决方案网络和共享中心|更改......
  • linux 内存回收笔记
    场景某个项目,每天大概某点会报readtimeout问题,该项目使用了缓存。估计和内存回收会有一定关系,内存回收引起的缓存失效?内存回收机制如楼上所说,在linux系统的缺省配置中,内存......
  • oracle报错:ORA-01839: date not valid for month specified(指定月份的日期无效)
    场景日期值存的是10位字符串,如2020-02-01,sql筛选时需要选1年以内的。select*fromt_userwhereto_date(app_date,'yyyy-MM-dd')>sysdate-360查看日志发现报错:ORA-01839......