显性等待的另一种写法

在看虫师的selenium--webdriver(python)教程时,发现另一种显性等待的写法,这也是WebDriverWait类源码中给出的例子

WebDriverWait(driver, 30, 1).until_not(lambda x: x.find_element_by_id("someId").is_displayed())

我们来看看虫师的例子

1|0一. html源码


在python代码的同级目录下保存一个level_locate.html文件

<!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8" /> <title>Level Locate</title> <script type="text/javascript" src="http://libs.baidu.com/jquery/1.9.1/jquery.min.js"></script> <link href="http://libs.baidu.com/bootstrap/2.3.2/css/bootstrap.min.css" rel="stylesheet" /> </head> <body <h3>Level locate</h3> <div class="span3"> <div class="well"> <div class="dropdown"> <a class="dropdown-toggle" data-toggle="dropdown" href="#">Link1</a> <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel" id="dropdown1" > <li><a tabindex="-1" href="#">Action</a></li> <li><a tabindex="-1" href="#">Another action</a></li> <li><a tabindex="-1" href="#">Something else here</a></li> <li class="divider"></li> <li><a tabindex="-1" href="#">Separated link</a></li> </ul> </div> </div> </div> <div class="span3"> <div class="well"> <div class="dropdown"> <a class="dropdown-toggle" data-toggle="dropdown" href="#">Link2</a> <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel" > <li><a tabindex="-1" href="#">Action</a></li> <li><a tabindex="-1" href="#">Another action</a></li> <li><a tabindex="-1" href="#">Something else here</a></li> <li class="divider"></li> <li><a tabindex="-1" href="#">Separated link</a></li> </ul> </div> </div> </div> </body> <script src="http://libs.baidu.com/bootstrap/2.3.2/js/bootstrap.js"></script> </html>

现在要求鼠标悬浮在Link1下拉框中的Action

 

2|0二. python实现的两种方法


2|11. 显性等待的第一种写法


from selenium import webdriver from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By from selenium.webdriver.common.action_chains import ActionChains import time import os driver = webdriver.Chrome() file_path = "file:///" + os.path.abspath("level_locate.html") driver.get(file_path) #窗口最大化 driver.maximize_window() #点击Link1链接(弹出下拉列表) driver.find_element_by_link_text("Link1").click() #id为dropdown1的下拉框的元素表达式 dropdown1_id = "dropdown1" #设置显性等待,等待id为dropdown1的下拉框出现 WebDriverWait(driver, 10, 0.3).until(EC.visibility_of_element_located((By.ID, dropdown1_id))) #定位到Action action_element = driver.find_element_by_xpath("//ul[@id='dropdown1']//a[text()='Action']") #鼠标定位到子元素上 ActionChains(driver).move_to_element(action_element).perform() time.sleep(2) driver.quit()

2|22. 显性等待的第二种写法


from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait import time import os driver = webdriver.Chrome() file_path = "file:///" + os.path.abspath("level_locate.html") driver.get(file_path) #窗口最大化 driver.maximize_window() #点击Link1链接(弹出下拉列表) driver.find_element_by_link_text("Link1").click() #找到id为dropdown1的父元素 WebDriverWait(driver, 10, 0.3).until(lambda the_driver: the_driver.find_element_by_id("dropdown1").is_displayed()) #在父元素下找到link为Action的子元素 menu = driver.find_element_by_id("dropdown1").find_element_by_link_text("Action") #鼠标定位到子元素上 webdriver.ActionChains(driver).move_to_element(menu).perform() time.sleep(2) driver.quit()

和方法一不同的地方,我都用橙色表示出来了,需要注意的是 is_displayed() 表示该元素是否用户可见

 

 

 

3|0参考文章


https://www.cnblogs.com/fnng/p/3193955.html

 


__EOF__

本文作者cnhkzyy
本文链接https://www.cnblogs.com/my_captain/p/9253272.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   cnhkzyy  阅读(1021)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2017-07-02 《Advanced Bash-scripting Guide》学习(十一):shift的用法
2017-07-02 《Advanced Bash-scripting Guide》学习(十):利用whois查询域名信息
点击右上角即可分享
微信分享提示