安装Selenium进行web⾃动化测试

2024-09-04 17:44

本文主要是介绍安装Selenium进行web⾃动化测试,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 驱动
  • 安装驱动管理工具
  • selenium安装
  • selenium+驱动+浏览器的⼯作原理
  • 自动化测试常⽤函数
    • 1. 元素定位
      • 1.1. `find_element` 的基本用法
      • 1.2. 常见的 `find_element` 定位方式
      • 1.3. `find_element` 的使用注意事项
      • 1.4. `find_element` 的进阶用法
  • 2. 操作测试对象
  • 3. 窗口操作
    • 4. 屏幕截图
    • 5. 弹窗处理
    • 6. 等待机制
    • 7. 浏览器
    • 8.文件上传


驱动

程序想要打开web浏览器就需要安装web驱动(即WebDriver),WebDriver 以本地化⽅式驱动浏览器

安装驱动管理工具

若通过安装驱动的⽅式来启动浏览器,每次浏览器更新后对应的驱动也需要更新,为了解决这个问题,selenium中提供了驱动管理⼯具webdriver-manager,有了webdriver-manager⽆需⼿动安装浏览器驱动,即使浏览器更新也不会影响⾃动化的执⾏。

pip install webdriver-manager

WebDriver Manager是⼀个开源的命令⾏⼯具,它可以⾃动下载和安装适⽤于不同浏览器的WebDriver。通过使⽤WebDriver Manager,我们可以确保浏览器驱动版本始终与浏览器版本保持⼀致,从⽽避免因版本不匹配⽽导致的各种问题。

selenium安装

Selenium是广泛使用的模拟浏览器运行的库,它是一个用于Web应用程序测试的工具。 Selenium测试直接运行在浏览器中,就像真正的用户在操作一样,并且支持大多数现代 Web 浏览器。
通过pip安装

pip install selenium

selenium+驱动+浏览器的⼯作原理

实现web⾃动化测试需要浏览器、浏览器驱动、selenium⾃动化脚本。

  1. 通过selenium编写的⾃动化脚本代码中在ChromeDriverService中创建⼀个服务
  2. 通过创建好的服务打开webdriver,安装在本地的驱动服务IP为localhost,PORT为ChromeDriverService中创建的端⼝号,该服务地址为selenium向webdriver发送请求的服务地址。
  3. 向浏览器驱动程序发送HTTP请求,浏览器驱动程序解析请求,打开浏览器,并获得sessionid,如果再次对浏览器操作需携带此id。
  4. 打开浏览器后,所有的selenium的操作(访问地址,查找元素等)均通过创建好的服务链接到
    webdriver,然后使⽤execute发送请求。
  5. 驱动收到请求并对请求进⾏解析,转成浏览器能够解析的脚本并发送给浏览器,浏览器通过请求的内容执⾏对应动作
  6. 浏览器再把执⾏的动作结果通过浏览器驱动程序返回给测试脚本。
    在这里插入图片描述

自动化测试常⽤函数

  1. 元素的定位
    web⾃动化测试的操作核⼼是能够找到⻚⾯对应的元素,然后才能对元素进⾏具体的操作。
    常⻅的元素定位⽅式⾮常多,如id,classname,tagname,xpath,cssSelector
    常⽤的主要由cssSelector和xpath

1. 元素定位

在Web自动化测试中,找到页面对应的元素是执行操作的关键。常见的元素定位方式包括idclassnametagnamexpathcssSelector等。其中,cssSelectorxpath最为常用。

  • cssSelector:通过选择器来选中页面中的指定标签元素,可以使用基础选择器和复合选择器。例如,定位百度首页的搜索输入框元素可以使用#kw,定位“百度一下”按钮可以使用#su

  • xpath:使用路径表达式在HTML文档中选取节点。它支持定位HTML页面中的所有节点、指定节点、直接子节点、父节点等。
    find_element 是自动化测试中最常用的函数之一,尤其是在使用 Selenium 进行 Web 自动化测试时。它用于在页面上定位一个元素,并返回一个 WebElement 对象,以便后续对该元素进行操作。

1.1. find_element 的基本用法

find_element 通常与多种定位方式(如 By.ID, By.CLASS_NAME, By.XPATH, By.CSS_SELECTOR 等)一起使用。这些定位方式帮助开发者根据页面元素的属性(如 ID、类名、标签名、XPath 等)来查找特定的元素。

from selenium import webdriver
from selenium.webdriver.common.by import By# 初始化浏览器驱动
driver = webdriver.Chrome()# 打开一个网页
driver.get("https://www.example.com")# 使用 find_element 定位元素
element = driver.find_element(By.ID, "element_id")

在这个例子中,find_element 函数用于通过元素的 ID 来定位页面上的一个元素,并将其赋值给 element 变量。

1.2. 常见的 find_element 定位方式

  • By.ID:通过元素的 ID 属性查找。

    element = driver.find_element(By.ID, "element_id")
    
  • By.CLASS_NAME:通过元素的 class 属性查找。

    element = driver.find_element(By.CLASS_NAME, "class_name")
    
  • By.XPATH:通过 XPath 表达式查找元素。

    element = driver.find_element(By.XPATH, "//tag[@attribute='value']")
    
  • By.CSS_SELECTOR:通过 CSS 选择器查找元素。

    element = driver.find_element(By.CSS_SELECTOR, ".class_name #element_id")
    

1.3. find_element 的使用注意事项

  • 元素唯一性find_element 只会返回匹配的第一个元素,如果页面上有多个符合条件的元素,只有第一个会被返回。

  • 元素未找到:如果找不到匹配的元素,find_element 会抛出 NoSuchElementException 异常。因此,在实际使用中,可以结合 try-except 语句来处理找不到元素的情况。

    try:element = driver.find_element(By.ID, "non_existent_id")
    except NoSuchElementException:print("元素未找到")
    
  • 隐式等待:为了提高元素查找的可靠性,可以在查找元素之前设置隐式等待时间,让 WebDriver 在查找元素时等待一段时间,以确保页面元素已经加载完成。

    driver.implicitly_wait(10)  # 等待最多10秒
    element = driver.find_element(By.ID, "element_id")
    

1.4. find_element 的进阶用法

除了查找单一元素之外,Selenium 还提供了 find_elements 方法,用于查找页面上符合条件的所有元素,并返回一个元素列表。这在需要对多个元素进行批量操作时非常有用。

elements = driver.find_elements(By.CLASS_NAME, "common_class")
for element in elements:print(element.text)

2. 操作测试对象

定位到元素后,接下来需要对元素进行操作,如点击、提交、输入、清除、获取文本等。

  • 点击/提交对象:通过click()方法可以点击指定元素。例如,点击百度首页的“百度一下”按钮:

    driver.find_element(By.CSS_SELECTOR, "#su").click()
    
  • 模拟按键输入:使用send_keys()方法可以模拟用户输入。例如,在百度搜索框中输入“迪丽热巴”:

    driver.find_element(By.CSS_SELECTOR, "#kw").send_keys("迪丽热巴")
    
  • 清除⽂本内容:使用clear()方法可以清除⽂本内容

driver.find_element(By.CSS_SELECTOR, "#kw").send_keys("迪丽热巴")
time.sleep(1)
driver.find_element(By.CSS_SELECTOR,"#kw").clear()
time.sleep(1)
driver.find_element(By.CSS_SELECTOR, "#kw").send_keys("古⼒娜扎")
  • 获取文本信息: text
text = driver.find_element(By.XPATH,'//*[@id="hotsearch-contentwrapper"]/li[1]/a/span[2]').text
print(f"text:{text}")
  • 获取当前页面标题和url
title = driver.title
url = driver.current_url

3. 窗口操作

在自动化测试中,经常需要处理多个浏览器窗口。通过句柄(handle)可以在不同窗口间切换。

  • 切换窗口:获取当前页面句柄和所有页面句柄后,可以循环判断并切换到最新的窗口
    curWindow = driver.current_window_handle
    allWindows = driver.window_handlesfor window in allWindows:if window != curWindow:driver.switch_to.window(window)
    
  • 窗口大小
#窗⼝最⼤化
driver.maximize_window()
#窗⼝最⼩化
driver.minimize_window()
#窗⼝全屏
driver.fullscreen_window()
#⼿动设置窗⼝⼤⼩
driver.set_window_size(1024,768)

4. 屏幕截图

driver.save_screenshot('../images/image.png')
#⾼阶版本
filename = "autotest-"+datetime.datetime.now().strftime('%Y-%m-%d-
%H%M%S')+'.png'
driver.save_screenshot('../images/'+filename)

5. 弹窗处理

在遇到页面弹窗时,可以使用Selenium提供的Alert接口进行处理。

  • 警告弹窗与确认弹窗:使用alert.accept()alert.dismiss()分别处理确认和取消操作。

    alert = driver.switchTo.alert;
    alert.accept();  // 确认
    alert.dismiss() ; //取消
    
  • 提示弹窗

alert.send_keys("hello")
alert.accept()
alert.dismiss()

6. 等待机制

由于代码执行速度通常比页面渲染速度快,为避免误报,需要引入等待机制。Selenium提供了三种等待方式:

  • 强制等待:使用time.sleep()强制等待指定时间。

优点:使⽤简单,调试的时候⽐较有效
缺点:影响运⾏效率,浪费⼤量的时间

  • 隐式等待:通过implicitly_wait()设置全局的等待时间,智能地等待元素加载。

优点:智能等待,作⽤于全局

  • 显式等待:使用WebDriverWaitExpectedConditions类自定义条件,灵活等待。

优点:显⽰等待是智能等待,可以⾃定义显⽰等待的条件,操作灵活
缺点:写法复杂

ps:不要混合隐式和显式等待,可能会导致不可预测的等待时间。

7. 浏览器

常⻅操作:
1)打开⽹站

driver.get("https://tool.lu/")

2)浏览器的前进、后退、刷新

driver.forward()
driver.back()
driver.refresh()

为了满足不同的测试需求,可以通过设置浏览器参数来调整测试环境。

  • 无头模式:在没有界面的环境中运行浏览器测试。
options = webdriver.ChromeOptions()
options.add_argument("-headless")
driver = 
webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()),options
=options)
  • 页面加载策略:调整页面加载方式,提高测试效率。例如,使用eager策略仅等待DOM加载完成,而其他资源可以继续加载。
options.page_load_strategy = '加载⽅式'

⻚⾯加载⽅式主要有三种类型:

策略说明
normal默认值, 等待所有资源下载
eagerDOM 访问已准备就绪, 但诸如图像的其他资源可能仍在加载
none完全不会阻塞WebDriver
options = webdriver.ChromeOptions()
options.page_load_strategy = 'eager'
driver = 
webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()),options
=options)

8.文件上传

点击⽂件上传的场景下会弹窗系统窗⼝,进⾏⽂件的选择。
selenium⽆法识别⾮web的控件,上传⽂件窗⼝为系统⾃带,⽆法识别窗⼝元素,但是可以使⽤sendkeys来上传指定路径的⽂件,达到的效果是⼀样的。

driver.get("file: ")
ele = driver.find_element(By.CSS_SELECTOR,"body > div > div > input[type=file]")
ele.send_keys("  ")

这篇关于安装Selenium进行web⾃动化测试的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1136595

相关文章

Zookeeper安装和配置说明

一、Zookeeper的搭建方式 Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模式。 ■ 单机模式:Zookeeper只运行在一台服务器上,适合测试环境; ■ 伪集群模式:就是在一台物理机上运行多个Zookeeper 实例; ■ 集群模式:Zookeeper运行于一个集群上,适合生产环境,这个计算机集群被称为一个“集合体”(ensemble) Zookeeper通过复制来实现

CentOS7安装配置mysql5.7 tar免安装版

一、CentOS7.4系统自带mariadb # 查看系统自带的Mariadb[root@localhost~]# rpm -qa|grep mariadbmariadb-libs-5.5.44-2.el7.centos.x86_64# 卸载系统自带的Mariadb[root@localhost ~]# rpm -e --nodeps mariadb-libs-5.5.44-2.el7

Centos7安装Mongodb4

1、下载源码包 curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.2.1.tgz 2、解压 放到 /usr/local/ 目录下 tar -zxvf mongodb-linux-x86_64-rhel70-4.2.1.tgzmv mongodb-linux-x86_64-rhel70-4.2.1/

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

字节面试 | 如何测试RocketMQ、RocketMQ?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、TPS是否正常等等问题。(上述都是临场发挥,但是RocketMQ真正的测试点,还真的需要探讨) 01 先了解RocketMQ 作为测试也是要简单了解RocketMQ。简单来说,就是一个分

Centos7安装JDK1.8保姆版

工欲善其事,必先利其器。这句话同样适用于学习Java编程。在开始Java的学习旅程之前,我们必须首先配置好适合的开发环境。 通过事先准备好这些工具和配置,我们可以避免在学习过程中遇到因环境问题导致的代码异常或错误。一个稳定、高效的开发环境能够让我们更加专注于代码的学习和编写,提升学习效率,减少不必要的困扰和挫折感。因此,在学习Java之初,投入一些时间和精力来配置好开发环境是非常值得的。这将为我

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在

安装nodejs环境

本文介绍了如何通过nvm(NodeVersionManager)安装和管理Node.js及npm的不同版本,包括下载安装脚本、检查版本并安装特定版本的方法。 1、安装nvm curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash 2、查看nvm版本 nvm --version 3、安装

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测