最新的selenium版本是4.0,已经于2021年10月发布。最新版本有4.6。
4.0版本,其有以下几点更新(有能力的可以看官方介绍,我现在的水平,只能百度其他人的文章):
一 https://www.jianshu.com/p/fa94fb4705e9
1 W3C webdriver标准化。
这个听着很糊涂,毕竟对标准不了解。文中举了一个例子:
Selenium3,终端通过JSON报文协议与浏览器在端节点连接。这要求API进行编码与译码。
Selenium4,测试将直接连接,不需要任何编译或译码API的请求,而是通过W3C协议,通过Java绑定将实现向前兼容,重点关注于W3C协议,而JSON报文协议不再使用
2 Selenium4 IDE
Chrome支持selenium IDE, 新的selenium IDE插件,完全基于node.js,而不再是老的基于HTML。
新的selenium IDE启动器将完全基于webdriver
新的命令行启动器将支持并发测试用例执行。并提供一些有用信息,例如测试花费时间,通过/失败测试用例数量
3 改良的Selenium Grid
Grid在原来有2个主要元素:Hub 和 Node
Hub扮演一个服务器的角色,在网络上以一个中心点控制所有测试机器。Node,是一台实际执行测试用例的测试主机。Hub分配测试执行给每一个具体有自己配对功能的Node。原启动时,通常在Node连接到hub时面对一些困难。
在selenium4中,grid不再需要单独的启动hub和node,只要启动了selenium服务,grid就会同时扮演hub和node的角色。
4 其它的界面更新,日志记录功能改善,更新的文档,不再多说。
二 https://www.xiaohongshu.com/discovery/item/6301270e000000001d034b03
1 元素定位 find_element(By.METHOD,"XXX")
不推荐定位方式直接写在方法名中,比如find_element_by_xx,都被整合成了一个方法find_element,通过By.method来选择你的查找元素方法(像我这种新手,看到这种直白的不同,更觉得有用)。老的方法虽然仍可使用,但在运行时会有DeprecationWarning。这种方法的使用需要引入类By, from selenium.webdriver.common.by import By
要记住,是common,不是com, 而且By 要大写
find_element(By.ID,"kw"), By.后面的ID,要全部大写
2 相对位置定位 find_element(locate_with(By.ID,"password").below(username)), find_element(with_tag_name("img".to_left_of(article_title))
在以前的版本中称之为“好友定位 friendly locators”
在selenium4中,find_element方法支持with(By)新方法,可返回RelativeLocator相对定位对象
举例1,登录功能,密码输入框在用户名输入框的下方
from selenium.webdriver.support.relative_locator import locate_with
username = driver.find_element(By.ID,"username")
password = driver.find_element(locate_with(By.ID, "password").below(username))
举例2,在获取下图所示所有文章标题左侧的图片地址
获取文章标题的位置作为锚点
通过with_tag_name查找元素的标签,要找的图片标签就是with_tag_name('img')
在文章标题的左侧就是to_left_of(to_right_of,below,above,near,to_dict)
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.relative_locator import with_tag_name,locate_with # 无法直接用By.TAG_NAME,用了就无法再用to_left_of。但可以用上面提到的locate_with
driver = webdriver.Chrome()
driver.get("https://www.caituotuo.top")
driver.find_element(By.XPATH,'//*[@id="scroll-down"]/i').click()
time.sleep(2)
# 文章标题
article_title = driver.find_element(By.CLASS_NAME,"article-title")
# 获取文章标题左侧的图片
elements = driver.find_elements(with_tag_name('img').to_left_of(article_title)) # to_left_of
# elements = driver.find_elements(locate_with(By.TAG_NAME,'img').to_left_of(article_title)) # to_left_of
for e in elements:
print(e.get_attribute('src'))
driver.quit()
3 打开新的标签页或容器 switch_to.new_window("tab") 或“window”
当我们需要测试打开几个页面或浏览器的场景时,在selenium3中的操作步骤:
创建新的webdriver实例
再使用windowhandle方法中的switch来执行操作
在selenium4中有一个新API,new_window,这意味着不需要再自己创建新的webdriver 实例
import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.caituotuo.top/")
driver.switch_to.new_window('tab') # .new_window("tab")
driver.get("https://www.cnblogs.com/caituotuo")
print(driver.title)
driver.switch_to.new_window("window") # .new_window("window")
driver.get("https://www.caituotuo.top/")
print(driver.title)
time.sleep(3)
driver.quit()
4 模拟移动设备
作用:将浏览器调成移动端模式,用于测试移动端H5页面
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
driver.webdriver.Chrome()
driver.get("https://www.caituotuo.top/")
time.sleep(10)
driver.execute_cdp_cmd( ### ###
"Emulation.setDeviceMetricsOverride",
{
"width":400,
"height":650,
"mobile":True,
"deviceScaleFactor":100
}
)
driver.find_element(By.XPATH,"//*[@ID='scroll-down']/i").click()
time.sleep(3)
driver.quit()
感谢 蔡坨坨老师,文章非常有价值。
标签:webdriver,driver,selenium,element,哪里,Selenium4,import,find From: https://www.cnblogs.com/guohui2022/p/16877987.html