Python的Selenium 3 和Selenium 4的写法区别

chatgpt/2023/9/24 2:28:08

1.Python 版本问题:

   Selenium 3的话使用Python 3.6.5都可以继续编写,但是到了Selenium 4的时候,python 的版本需要 3.7 或 更高的版本。

2.差异:

   Selenium 4 移除了对旧协议的支持,并在引擎盖下默认使用 W3C WebDriver 标准。对于大多数情况,此实施不会影响最终用户,主要的例外是Capabilities和Actions类。在开发 Selenium 3.x 版本时,实现了对 W3C WebDriver 标准的支持。支持这个新协议和旧的 JSON 有线协议。在 3.11 版左右,Selenium 代码开始符合 W3C 1 级规范。最新版本的 Selenium 3 中的 W3C 兼容代码将在 Selenium 4 中按预期工作。 

3.Capabilities的更新

   W3C WebDriver 标准功能列表:

  • browserName

  • browserVersion(代替version)

  • platformName(代替platform)

  • acceptInsecureCerts

  • pageLoadStrategy

  • proxy

  • timeouts

  • unhandledPromptBehavior

   Selenium 3的写法:

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

  Selenium 4的写法:

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)

  4.定位元素的写法:

     Selenium 3的写法:

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")

     Selenium 4的写法:

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")

    注:Selenium 3的写法在 Selenium 4中,是使用不了的。

 5.多位元素定位:

    Selenium 3的写法:

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")

   Selenium 4的写法:

driver.find_elements(By.CLASS_NAME,"xx") 
# class name 相当于样式容易重复driver.find_elements(By.CSS_SELECTOR,"xx")
# 获取css selector:右击鼠标-检查,定位到元素,
# 在弹出的elements选中的地方鼠标右击-copy-copyselectordriver.find_elements(By.ID,"xx") 
# id 可以唯一定位到一个元素(全局唯一)driver.find_elements(By.LINK_TEXT,"xx") 
# link text 有时候不是一个输入框也不是一个按钮,
# 而是一个文字链接,例如百度搜索界面左上角的新闻,可能重复driver.find_elements(By.NAME,"xx") 
# name 要确保是全局唯一的driver.find_elements(By.PARITIAL_LINK_TEXT,"xx") 
# partial link text 部分链接定位,链接的部分名称,会有重复的可能。driver.find_elements(By.TAG_NAME,"xx") 
# tag name 标签(很多),类似<div>模块,<a>,
# <link>,<span>,<input>,非常容易重复。driver.find_elements(By.XPATH,"xx")
# 全局唯一
# 获取xpath:右击鼠标-检查,定位到元素,在弹出的elements选中的地方鼠标右击-copy-copyxpath
# xpath格式注意事项:双引号之间有双引号的时候,把里面的双引号改成单引号。
# /* 省略了前面的路径

 6.executable_path

    Selenium 3的写法:

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)

    Selenium 4的写法:

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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.exyb.cn/news/show-5312852.html

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

113、单例Bean是单例模式吗?

单例Bean是单例模式吗? 通常来说,单例模式是指在一个JVM中,一个类只能构造出来一个对象,有很多方法来实现单例模式,比如懒汉模式,但是我们通常讲的单例模式有一个前提条件就是规定在一个JVM中,那如果要在两个JVM中保证单例呢?那可能就要用分布式锁这些技术,这里的重点…

WEB浏览器轻松读写NDEF智能海报、地图坐标、文本标签信息

本示例使用的发卡器&#xff1a;Android Linux RFID读写器NFC发卡器WEB可编程NDEF文本/智能海报/-淘宝网 (taobao.com) <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&…

【React】关于组件之间的通讯

&#x1f31f;组件化&#xff1a;把一个项目拆成一个一个的组件&#xff0c;为了便与开发与维护 组件之间互相独立且封闭&#xff0c;一般而言&#xff0c;每个组件只能使用自己的数据&#xff08;组件状态私有&#xff09;。 如果组件之间相互传参怎么办&#xff1f; 那么就要…

Shell错误:/bin/bash^M: bad interpreter: No such file or directory

目录 错误原因和现象 解决方案 错误原因和现象 在执行shell脚本的时候&#xff0c;报错&#xff1a;/bin/bash^M: bad interpreter: No such file or directory。 是由于该脚本文件是在Windows平台编写&#xff0c;然后在MacOS平台中执行。 在Windows平台上文件是dos格式&…

Qt 5. QSerialPort串口收发

1. 代码 //ex2.cpp #include "ex2.h" #include "ui_ex2.h" #include <QtSerialPort/QSerialPort> #include <QtSerialPort/QSerialPortInfo>int static cnt 0;Ex2::Ex2(QWidget *parent): QDialog(parent), ui(new Ui::Ex2) {ui->setupUi…

进入NetApp FAS存储系统loader的三种方法

有时候需要在loader模式下对系统硬件做一些offline的诊断&#xff0c;但offline 对系统物理部件做诊断需要进入到loader模式&#xff0c;如何从一个正常运行的系统进入到loader模式呢&#xff1f; 第一种就是启动的时候看到CtrlC的提示&#xff0c;就可以顺利进入loader。 如…

SpringBoot的pom文件、容器、组件

一、pom文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4…

【Qt】Qt 实现图像格式转图标 ico 格式的程序

【Qt】Qt 实现图像格式转图标 ico 格式的程序 文章目录 【Qt】Qt 实现图像格式转图标 ico 格式的程序核心代码编写应用程序1. 设计界面2. 头文件3. 源文件 核心代码 此程序得核心代码既是&#xff0c;使用 QImage 打开图片文件&#xff0c;并保存为 ICO 格式。 QImage img(so…
推荐文章