Selenium 4 有哪些不一样?

转载请注明出处❤️

作者:测试蔡坨坨

原文链接:caituotuo.top/d59b986c.html

你好,我是测试蔡坨坨。

众所周知,Selenium在2021年10月13号发布了Selenium4,目前最新的版本应该是Selenium 4.4.0。

以前一直用的Selenium3,那么Selenium4相对Selenium3对我们做自动化测试来说有哪些需要注意的改进点或者变化呢?

今天,我们就来简单地聊一聊Selenium4的那些新变化。

通过阅读官方文档,总结了几个比较引人注目的变化点。

元素定位

在Selenium4中,不推荐把定位方式直接写在方法名中,比如一系列的find_element_by_xx方法find_element_by_id、find_element_by_name、find_element_by_class_name等都被整合成为了一个方法find_element,并且通过By.method来选择你的查找元素方法。

同理,多个元素定位推荐使用find_elements(By.method,””)。

注意:

  • 虽然find_element_by_id、find_element_by_name……这些方法目前仍然可以使用,但是运行时会有DeprecationWarning警告 Selenium 4 有哪些不一样? Selenium 4 有哪些不一样?
  • find_element(By.method, “xxx”)这种方法在3版本也有,但是并没有特别强调
  • 这种方法的使用需要引入类By,from selenium.webdriver.common.by import By
author: 测试蔡坨坨
datetime: 2022/8/20 19:19
function: 元素定位

import time

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()

driver.get("https://www.baidu.com")

不推荐
driver.find_element_by_id("kw").send_keys("测试蔡坨坨")
driver.find_element_by_id("su").click()

推荐
driver.find_element(By.ID, "kw").send_keys("测试蔡坨坨")
driver.find_element(By.ID, "su").click()
time.sleep(3)

driver.quit()

不推荐:

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

推荐:

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

相对位置定位

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

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:要获取下图所示所有文章标题左侧的图片地址

Selenium 4 有哪些不一样?

操作步骤:

  • 获取文章标题的位置作为锚点
  • 通过with_tag_name查找元素的标签,要找的是图片标签就是with_tag_name(‘img’)
  • 在文章标题的左侧就是to_left_of(其他位置关系如:to_right_of、below、above、near、to_dict)

代码实现:

author: 测试蔡坨坨
datetime: 2022/8/20 19:19
function: 相对位置定位

import time

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.relative_locator import with_tag_name

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))
for e in elements:
    print(e.get_attribute('src'))

driver.quit()

运行结果:

Selenium 4 有哪些不一样?

打开新的标签页或窗口

当我们需要测试打开几个页面或浏览器的场景时,在Selenium3中的操作步骤:

  • 创建新的Web Driver实例
  • 再使用Windowhandle方法中的Switch来执行操作

在Selenium4中有一个新的API,new_window,这意味着不需要再自己创建新的Web Driver实例

author: 测试蔡坨坨
datetime: 2022/8/20 23:37:32
function: 打开新的标签页或窗口

import time

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.caituotuo.top/")

打开新的标签页,并切换进入
driver.switch_to.new_window("tab")
driver.get("https://www.cnblogs.com/caituotuo")
print(driver.title)

打开新的窗口,并切换进入
driver.switch_to.new_window("window")
driver.get("https://www.caituotuo.top/")
print(driver.title)

time.sleep(3)
driver.quit()

Selenium 4 有哪些不一样?

模拟移动设备

作用:将浏览器调成移动端模式,用于测试移动端H5页面。

author: 测试蔡坨坨
datetime: 2022/8/20 21:11
function: 模拟移动设备

import time

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.execute_cdp_cmd(
    "Emulation.setDeviceMetricsOverride",
    {
        "width": 400,
        "height": 650,
        "mobile": True,
        "deviceScaleFactor": 100
    }
)

driver.get("https://www.caituotuo.top/")
driver.find_element(By.XPATH, '//*[@id="scroll-down"]/i').click()
time.sleep(3)
driver.quit()

Selenium 4 有哪些不一样?

Original: https://www.cnblogs.com/caituotuo/p/16609232.html
Author: 测试蔡坨坨
Title: Selenium 4 有哪些不一样?

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/684867/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • es之7:elastic search partial update

    PUT /index/type/id,创建文档&替换文档,就是一样的语法 1、查询更新全量方式 一般对应到应用程序中,每次的执行流程基本是这样的:(1)应用程序先发起一个g…

    技术杂谈 2023年5月30日
    084
  • 好物合集(1)

    Snipaste(超好用的电脑截图软件) 你是否还在为不知道怎么截图而烦恼,你是否还在不断切屏看另一个页面的内容而烦恼,你是否还在为如何提取页面中图片的大小以及颜色而烦恼,现在,这…

    技术杂谈 2023年7月11日
    073
  • 描述高频题之队列&栈

    栈和队列 全文概览 基础知识 栈 栈是一种先进后出的数据结构。这里有一个非常典型的例子,就是堆叠盘子。我们在放盘子的时候,只能从下往上一个一个的放;在取的时候,只能从上往下一个一个…

    技术杂谈 2023年7月25日
    073
  • Pthread并发编程(一)——深入剖析线程基本元素和状态

    Pthread 并发编程(一)——深入剖析线程基本元素和状态 前言 在本篇文章当中讲主要给大家介绍 pthread 并发编程当中关于线程的基础概念,并且深入剖析进程的相关属性和设置…

    技术杂谈 2023年7月24日
    077
  • nginx配置文件讲解及示例(可复制)

    【示例一】 运行用户 user www-data; 启动进程,通常设置成和cpu的数量相等 worker_processes 1; 全局错误日志及PID文件 error_log /…

    技术杂谈 2023年7月11日
    085
  • 汇编实验二设置栈顶

    实验笔记二:ss设置栈顶 mov ax,2000 mov ss,ax mov sp,0010 mov ax,2000 mov ss,ax mov sp,0010 执行后,内存地址会…

    技术杂谈 2023年6月21日
    076
  • HttpWebResponse 获取网页乱码

    string html = “”; string url = “http://www.stats.gov.cn/tjsj/tjbz/tjyqhd…

    技术杂谈 2023年5月30日
    0113
  • 继承中的初始化和加载

    继承关系中的执行顺序代码 package onjava8.extend; /** * 继承关&#x7CFB…

    技术杂谈 2023年7月25日
    074
  • cgroup限制PySpark内存使用

    根据业务需求,需要对pyspark内存资源进行限制 本文使用的环境为pyspark 3.1.2,standalone模式 不足之处还请指出 pyspark进程说明 首先我们需要知道…

    技术杂谈 2023年6月21日
    0117
  • vlc media下载路径

    vlc media下载路径http://download.videolan.org/pub/videolan/vlc/ posted on2022-06-07 09:40 shao…

    技术杂谈 2023年6月1日
    0102
  • 网络编程杂谈之TCP协议

    TCP协议属于网络分层中的传输层,传输层作用的就是建立端口与端口的通信,而其下一层网络层的主要作用是建立”主机到主机”的通信,所以在我们日常进行网络编程时只…

    技术杂谈 2023年7月25日
    0117
  • 多态

    一.相关定义 1-1 多态 多态是同一个行为具有多个不同表现形式或形态的能力。同一个形参类型为基类的接口,使用不同的子类的实例可以执行不同操作。 1-2 绑定 绑定:将一个方法调用…

    技术杂谈 2023年7月23日
    082
  • NTP网络时间服务器为用户提供准确可靠的时间

    NTP网络时间服务器为用户提供准确可靠的时间 NTP网络时间服务器为用户提供准确可靠的时间 京准电子科技官微——ahjzsz 因特网上的时间是非常重要的。网络时间服务器针对自动化系…

    技术杂谈 2023年6月21日
    0105
  • Jenkins构建vue项目自动部署到远程服务器

    1.环境要求 以下服务器的操作系统均为Centos7 服务器A:Gitlab 服务器B:Jenkins 服务器C:Nginx,即你的vue项目部署服务器。 gitlab、Jenki…

    技术杂谈 2023年7月11日
    066
  • 尴尬:在Excel中为指定数据插入饼图失败

    本来是非常非常简单的一个需求,即便不会,随便百度下也都有说明。可自己却在一次紧急工作中因此耽误了时间,需求是需要插入一个饼图但因操作错误一直无法正确显示饼图数据,非常尴尬,干脆记录…

    技术杂谈 2023年5月31日
    069
  • 编程技巧│超实用 nginx 中常见的配置合集

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    技术杂谈 2023年7月11日
    085
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球