Selenium浏览器交互原理与应用,玩转Web自动化测试

news/2025/1/11 14:58:16/

 目录

 前言:

浏览器交互:

Selenium的实现方式:

Selenium WebDriver:

WebDriver的等待机制:

总结:

 Web自动化测试:


 前言:

Web自动化测试是现代软件开发中必不可少的一个环节,它可以帮助开发人员快速自动化地测试Web应用程序,从而大大缩短测试周期,提高测试效率,降低测试成本。Selenium是一款广泛使用的Web自动化测试工具,它提供了丰富的API,可以方便地模拟用户在浏览器中的操作,如点击、输入、选择等,并对Web应用程序进行自动化测试。

浏览器交互:

在介绍Selenium原理之前,我们先来看一下浏览器交互。Web应用程序与浏览器之间是通过HTTP协议进行通信的,简单来说就是客户端(浏览器)向服务端(Web服务器)发送请求,服务器返回响应。当客户端收到响应后,会根据响应内容进行显示。在这个过程中,浏览器会根据HTML、CSS和JavaScript等Web技术解析和显示Web页面。

Selenium利用浏览器提供的驱动程序(Driver)来模拟用户在浏览器中的操作。在Selenium中,不同的浏览器需要使用不同的驱动程序。例如,Chrome浏览器需要使用ChromeDriver,Firefox浏览器需要使用GeckoDriver,Edge浏览器需要使用EdgeDriver等。Selenium通过驱动程序与浏览器进行交互,模拟用户在浏览器中的操作,如打开网页、点击链接、输入文本、提交表单等。

Selenium的实现方式:

下面我们来看一下Selenium的实现方式。Selenium提供了三种实现方式,分别是Selenium RC、Selenium IDE和Selenium WebDriver。Selenium RC是最早的Selenium工具,它通过在浏览器中嵌入JavaScript脚本,模拟用户在浏览器中的操作。Selenium IDE是一个可视化工具,可以记录用户在浏览器中的操作,并生成自动化测试脚本。Selenium WebDriver是Selenium最新的实现方式,由于其强大的功能和灵活性,已成为当前Web自动化测试的主流工具。

Selenium WebDriver:

Selenium WebDriver是基于W3C Web Driver协议实现的,它提供了各种API,可以方便地模拟用户在浏览器中的操作。例如,我们可以使用WebDriver实现下面的示例代码:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys# 创建Chrome浏览器对象
driver = webdriver.Chrome()# 打开百度首页
driver.get("http://www.baidu.com")# 在搜索框中输入关键字
elem = driver.find_element_by_name("wd")
elem.send_keys("Selenium Webdriver")# 模拟回车键
elem.send_keys(Keys.RETURN)# 关闭浏览器
driver.close()

在这段代码中,我们首先创建了Chrome浏览器对象,然后打开百度首页,搜索关键字“Selenium Webdriver”,最后关闭浏览器。其中,`driver.get()`方法用于打开指定的网址,`driver.find_element_by_name()`方法用于查找指定名称的元素,`elem.send_keys()`方法用于在文本框中输入文本,`elem.send_keys(Keys.RETURN)`方法模拟回车键,`driver.close()`方法用于关闭浏览器。

除了上述API外,Selenium WebDriver还提供了很多其他的API,例如`driver.find_element_by_id()`、`driver.find_element_by_xpath()`、`driver.find_element_by_css_selector()`等,可以根据元素的ID、XPath或CSS选择器查找指定的元素。此外,还可以对元素进行点击(`elem.click()`)、获取元素的属性(`elem.get_attribute()`)、获取元素的文本(`elem.get_text()`)等操作。

在使用Selenium时,需要注意一些细节问题。例如,需要在程序中指定驱动程序的路径(`webdriver.Chrome("path/to/chromedriver")`),否则Selenium无法启动浏览器。同时,需要注意浏览器版本与驱动程序版本的对应关系,否则也会出现兼容性问题。

WebDriver的等待机制:

另外,Selenium也提供了一些高级功能,如WebDriver的等待机制。在Web自动化测试中,需要等待页面加载完成后才能进行下一步操作,否则可能会导致测试失败。WebDriver提供了隐式等待(`driver.implicitly_wait()`)和显式等待(`WebDriverWait`)两种等待方式。隐式等待方式会在指定的时间内自动等待页面加载完成,而显式等待方式则需要指定等待条件,直到满足条件后才会进行下一步操作。例如,下面示例代码中的显式等待方式会等待页面上的某个元素出现后再进行点击操作:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC# 创建Chrome浏览器对象
driver = webdriver.Chrome()# 打开百度首页
driver.get("http://www.baidu.com")# 在搜索框中输入关键字
elem = driver.find_element_by_name("wd")
elem.send_keys("Selenium Webdriver")# 等待搜索结果出现,并点击第一个结果
wait = WebDriverWait(driver, 10)
elem = wait.until(EC.presence_of_element_located((By.XPATH, '//div[@class="result c-container"][1]//a')))
elem.click()# 关闭浏览器
driver.close()

在这段示例代码中,我们首先创建了Chrome浏览器对象,然后打开百度首页,搜索关键字“Selenium Webdriver”,等待搜索结果中的第一个链接出现,最后点击该链接。其中,`WebDriverWait`设置最长等待时间为10秒,`EC.presence_of_element_located`用于指定等待条件,即直到页面上至少出现一个满足条件的元素后再进行下一步操作。

总结:

综上所述,Selenium是一款功能强大的Web自动化测试工具,可以模拟用户在浏览器中的操作,对Web应用程序进行自动化测试。Selenium WebDriver是Selenium最新的实现方式,提供了丰富的API和高级功能,可以帮助开发人员快速构建Web自动化测试脚本,并大大提高Web自动化测试的效率和可靠性。

【自动化测试交流】:574737577icon-default.png?t=N3I4http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=NMRVNWflxt3xkgJD_Cj1eSi6GHgTNQAw&authKey=G4Z6oltN4M9aCbBQfUODeoKPeKUsDSGmyxsSOXuwLjjN%2BBtm5ZJD3KeOsXJHwpC%2F&noverify=0&group_code=574737577

自动化测试:

 Web自动化测试:

自动化测试-福利:


http://www.ppmy.cn/news/80611.html

相关文章

ThingsBoard教程(五二):规则节点解析 AWS SNS Node, AWS SQS Node

AWS SNS Node Since TB Version 2.0 节点将消息发布到AWS SNS(亚马逊简单通知服务)。 配置: 主题ARN模式 - 可以直接设置消息发布的主题名称,也可以使用模式,该模式将使用消息元数据解析为实际的ARN主题名称。 AWS Access Key ID和AWS Secret Access Key是具有编程访问…

庄懂的TA笔记(十七)<特效:屏幕UV + 屏幕扰动>

庄懂的TA笔记(十七)<特效:屏幕UV 屏幕扰动> 大纲: 目录 庄懂的TA笔记(十七)<特效:屏幕UV 屏幕扰动> 大纲: 正文: 一…

微前端nuxt3.0方便请求api可封装一个使用哈希算法出key值的http,http封装

http.ts import { hash } from ohash import type { FetchOptions } from ohmyfetch interface httpOptions { source?: string } /**** 获取接口前缀 */ 我这里为不同站点的接口做了区分,主站点为api,demo站点为demoapi function GetPrefixUrl(so…

IMX6ULL裸机篇之DDR3参数配置分析

一. DDR3L 初始化简介 上一篇博文进行了 DDR参数的初始化,通过一个 execl表进行配置,生成脚本文件。文章网址如下: IMX6ULL裸机篇之DDR3初始化_凌雪舞的博客-CSDN博客 本文对 DDR的参数配置进行详细的说明。即对 "Register Configur…

记一次docker中的oracle连接问题

起因是客户登陆时报错TNS-12537 登陆上上服务器后,发现了几个特点。 1、没有oracle用户 2、数据文件的位置和spfile里面写的不一样 3、pmon进程存在,但是父进程ID不是1 4、配置oracle用户及环境变量,但是as sysdba无法登录到数据库 查看…

测试岗位是巨坑,7年测试告诉你千万别入行.....

每次都有人问我软件测试的前景是什么样的,每年也会有人很多人纷纷涌入测试的岗位上,希望自己能够进入阿里、华为等大厂 但是测试岗位真的那么吃香吗?今天我结合从零基础小白到测试开发的成长经历,来说下这个行业的发展前景&#…

【算法】Convert to Base -2 负二进制转换

文章目录 Convert to Base -2 负二进制转换问题描述:分析代码 Convert to Base -2 负二进制转换 问题描述: 给你一个整数 n ,以二进制字符串的形式返回该整数的 负二进制(base -2)表示。 注意,除非字符串…