盘点selenium4和selenium3的区别

本文介绍了在升级Python的Selenium库时可能遇到的依赖问题,包括Python3.7及以上版本要求、pip版本升级、新版本的Capabilities和Actions类更改、定位元素方法更新以及Selenium4引入的相对定位功能。同时提供了详细的安装和配置指导。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在某些情况下,升级仍然会存在依赖项的问题,比如使用python的pip进行selenium安装的时候会出现依赖异常。

一、升级依赖关系

使用 Python 的最重要变化是所需的最低版本,Selenium 4 将至少需要Python 3.7 或更高版本。

在python环境下,基于pip命令行做升级的话, 你可以执行:

1、在python3.7+环境下

执行如下命令会自动安装selenium4以上最新版。

pip3 install selenium

如果需要安装selenium3的相关版本,需要指定版本安装。

pip3 install selenium==3.14.0

如果在python3.7以上环境,但是pip版本在19以下,会出现依赖问题,而导致安装最新版selenium失败的问题,解决方法就是升级pip。、

python -m pip install --upgrade pip

或者通过get-pip.py文件升级(私聊作者获取最新版),将其下载到本地:d:\get-pip.py

可以通过执行该文件升级pip,主要用于pip崩溃后的重装和升级。

python d:\get-pip.py
2、在python3.6环境下

执行如下命令会自动安装selenium3.14.0版本。

pip3 install selenium

二、新版本的差异

Selenium 4 移除了对旧协议的支持,并在引擎盖下默认使用 W3C WebDriver 标准。对于大多数情况,此实施不会影响最终用户,主要的例外是Capabilities和Actions类。

1、capabilities的更新

如果测试功能的结构不符合 W3C,可能会导致会话无法启动,以下是 W3C WebDriver 标准功能列表:

  • ·browserName
  • ·browserVersion(代替version)
  • ·platformName(代替platform)
  • ·acceptInsecureCerts
  • ·pageLoadStrategy
  • ·proxy
  • ·timeouts
  • ·unhandledPromptBehavior

上面列表中未包含的任何功能都需要包含供应商前缀。这适用于浏览器特定功能以及云供应商特定功能。例如,如果您的云供应商为您的测试使用build和name功能,您需要将它们包装在一个cloud:options块中(与您的云供应商核对适当的前缀)。

旧版本的写法(selenium3):

 
caps = {}
 
caps['browserName'] = 'firefox'
 
caps['platform'] = 'Windows 10'
 
caps['version'] = '92'
 
caps['build'] = my_test_build
 
caps['name'] = my_test_name
 
driver = webdriver.Remote(cloud_url, desired_capabilities=caps)

新版本的写法(selenium4+):

2、定位元素方法的更新

 
from selenium.webdriver.firefox.options import Options as FirefoxOptions
 
options = FirefoxOptions()
 
options.browser_version = '92'
 
options.platform_name = 'Windows 10'
 
cloud_options = {}
 
cloud_options['build'] = my_test_build
 
cloud_options['name'] = my_test_name
 
options.set_capability('cloud:options', cloud_options)
 
driver = webdriver.Remote(cloud_url, options=options)

旧版本的写法(selenium3):

 
driver.find_element_by_class_name("className")
 
driver.find_element_by_css_selector(".className")
 
driver.find_element_by_id("elementId")
 
driver.find_element_by_link_text("linkText")
 
driver.find_element_by_name("elementName")
 
driver.find_element_by_partial_link_text("partialText")
 
driver.find_element_by_tag_name("elementTagName")
 
driver.find_element_by_xpath("xpath")

以上写法在selenium4中已经失效,不能使用。

新版本的写法(selenium4+):

 
 
from selenium.webdriver.common.by import By
 
driver.find_element(By.CLASS_NAME,"xx")
 
driver.find_element(By.CSS_SELECTOR,"xx")
 
driver.find_element(By.ID,"xx")
 
driver.find_element(By.LINK_TEXT,"xx")
 
driver.find_element(By.NAME,"xx")
 
driver.find_element(By.PARITIAL_LINK_TEXT,"xx")
 
driver.find_element(By.TAG_NAME,"xx")
 
driver.find_element(By.XPATH,"xx")
3、定位多个元素方法的更新

查找多个元素 使用find_elements*。

旧版本的写法(selenium3):

 
driver.find_elements_by_class_name("className")
 
driver.find_elements_by_css_selector(".className")
 
driver.find_elements_by_id("elementId")
 
driver.find_elements_by_link_text("linkText")
 
driver.find_elements_by_name("elementName")
 
driver.find_elements_by_partial_link_text("partialText")
 
driver.find_elements_by_tag_name("elementTagName")
 
driver.find_elements_by_xpath("xpath")

新版本的写法(selenium4+):

 
driver.find_elements(By.CLASS_NAME,"xx")
 
driver.find_elements(By.CSS_SELECTOR,"xx")
 
driver.find_elements(By.ID,"xx")
 
driver.find_elements(By.LINK_TEXT,"xx")
 
driver.find_elements(By.NAME,"xx")
 
driver.find_elements(By.PARITIAL_LINK_TEXT,"xx")
 
driver.find_elements(By.TAG_NAME,"xx")
 
driver.find_elements(By.XPATH,"xx")
4、executable_path的更新

executable_path 已弃用, 请传递一个服务对象。

旧版本的写法(selenium3):

 
from selenium import webdriver
 
options = webdriver.ChromeOptions()
 
options.add_experimental_option("excludeSwitches", ["enable-automation"])
 
options.add_experimental_option("useAutomationExtension", False)
 
driver = webdriver.Chrome(executable_path=CHROMEDRIVER_PATH, options=options)

新版本的写法(selenium4+):

from selenium import webdriver
 
from selenium.webdriver.chrome.service import Service as ChromeService
 
options = webdriver.ChromeOptions()
 
options.add_experimental_option("excludeSwitches", ["enable-automation"])
 
options.add_experimental_option("useAutomationExtension", False)
 
service = ChromeService(executable_path=CHROMEDRIVER_PATH)
 
driver = webdriver.Chrome(service=service, options=options)

三、Selenium 4新增了相对定位

Selenium 4中带来了相对定位这个新功能,在以前的版本中被称之为"好友定位 (Friendly Locators)"。它可以帮助你通过某些元素作为参考来定位其附近的元素。

现在可用的相对定位有:

above 元素上

below 元素下

toLeftOf 元素左

toRightOf 元素右

near 附近

findElement 方法现在支持with(By)新方法其可返回RelativeLocator相对定位对象。

1、如何工作

Selenium是通过使用JavaScript函数返回对应元素的各种属性例如:右,左,下,上。

2、above() 元素上

返回当前指定元素位置上方的WebElement对象

 
from selenium.webdriver.common.by import By
 
from selenium.webdriver.support.relative_locator import locate_with
 
passwordField = driver.find_element(By.ID, "password")
 
emailAddressField = driver.find_element(locate_with(By.TAG_NAME, "input").above(passwordField))
2、below() 元素下

返回当前指定元素位置下方的WebElement对象。

from selenium.webdriver.common.by import By
 
from selenium.webdriver.support.relative_locator import locate_with
 
emailAddressField = driver.find_element(By.ID, "email")
 
passwordField = driver.find_element(locate_with(By.TAG_NAME, "input").below(emailAddressField))
3、toLeftOf() 元素左

返回当前指定元素位置左方的WebElement对象。

 
from selenium.webdriver.common.by import By
 
from selenium.webdriver.support.relative_locator import locate_with
 
submitButton = driver.find_element(By.ID, "submit")
 
cancelButton = driver.find_element(locate_with(By.TAG_NAME, "button").
 
to_left_of(submitButton))
4、toRightOf() 元素右

返回当前指定元素位置右方的WebElement对象。

  1. from selenium.webdriver.common.by import By
     
    from selenium.webdriver.support.relative_locator import locate_with
     
    cancelButton = driver.find_element(By.ID, "cancel")
     
    submitButton = driver.find_element(locate_with(By.TAG_NAME, "button").
     
    to_right_of(cancelButton))

4、near() 附近 

from selenium.webdriver.common.by import By
 
from selenium.webdriver.support.relative_locator import locate_with
 
emailAddressLabel = driver.find_element(By.ID, "lbl-email")
 
emailAddressField = driver.find_element(locate_with(By.TAG_NAME, "input").
 
near(emailAddressLabel))

作为一个软件测试的过来人,我想尽自己最大的努力,帮助每一个伙伴都能顺利找到工作。所以我整理了下面这份资源,现在免费分享给大家,有需要的小伙伴可以关注【公众号:开心螺蛳粉】自提!

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。在这里插入图片描述

在这里插入图片描述

行动吧,在路上总比一直观望的要好,未来的你肯定会感谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入群:1150305204,里面有各种测试开发资料和技术可以一起交流哦。

Selenium是主流的Web UI自动化测试库之一,它经历了多个版本的迭代,目前基于Selenium-4.4.3版本进行开发Selenium由一些插件类库组成,包括Selenium IDE(浏览器的录制与回放功能)、Selenium Grid(用于在多台计算机或异构环境中进行测试的工具)、Selenium WebDriver(提供客户端API接口,用于控制浏览器驱动)。 在Selenium中,还存在一些其他的组件,例如Selenium Server,它由Launcher、Http ProxySelenium Core组成。Selenium Server主要用于支持分布式测试远程执行。Launcher用于启动Selenium Server,Http Proxy用于拦截处理HTTP请求,Selenium Core则是一个JavaScript库,用于驱动浏览器执行测试脚本。 总结来说,Selenium是一个功能强大的Web UI自动化测试库,它提供了多个组件类库,用于实现录制与回放、分布式测试、控制浏览器驱动等功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [盘点SeleniumAppium异同点,揭秘二者内部原理!](https://blog.youkuaiyun.com/cky8792/article/details/100208790)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [selenium4自动化测试](https://blog.youkuaiyun.com/m0_61251376/article/details/127837900)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值