Selenium——基于Web的UI自动化测试工具(一)

这篇具有很好参考价值的文章主要介绍了Selenium——基于Web的UI自动化测试工具(一)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        一、selenium简介

        Selenium是一个自动化测试工具,用于模拟用户在Web上的行为。它支持多种浏览器,如Chrome、Firefox、IE等。Selenium可以实现多种操作,包括打开浏览器、导航到指定URL、填写表单、点击按钮、获取页面元素等。
        Selenium有多种语言实现,包括Java、Python、C#等,可以根据自己的喜好和需求选择合适的语言来编写测试脚本。
        Selenium还提供了丰富的API和工具,如Selenium WebDriver、Selenium Grid等,可以用于构建可靠的、可扩展的自动化测试框架。
        Selenium的特点包括:

  • 支持多种浏览器:可以在不同的浏览器上运行测试,确保在不同环境下的兼容性;
  • 灵活性:可以模拟用户的各种操作,如点击、输入、滚动等;
  • 可扩展性:可以根据需求自定义各种操作和断言,满足不同的测试需求;
  • 多种语言支持:支持Java、Python、C#等多种编程语言,方便开发者使用;
  • 强大的定位机制:可以通过多种方式定位页面元素,如ID、name、class等。

        二、python搭建selenium的环境

        pip基本命令

pip list # 查看当前所有的第三方库
pip install 第三方包名 # 在线下载、安装指定的第3方包
pip uninstall 第三防包名 # 卸载指定的第三方包

        selenium安装

pip install selenium

        如果觉得官方下载源较慢,可以使用国内的镜像地址(清华源)

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple selenium

        下载对应浏览器的驱动程序文件

1.Chrome驱动地址:http://npm.taobao.org/mirrors/chromedriver
2.Firefox驱动地址:https://github.com/mozilla/geckodriver/releases/
3.IE驱动地址:http://selenium-release.storage.googleapis.com/index.html

        将下载的驱动包解压出来的exe文件,放置在环境变量path能找到的路径下

        三、WebDriver(Web驱动)类详细用法

        1. WebDriver类的对象是真正操作浏览器的对象,不同的浏览器会有不同的驱动类对象别名。
        2. 启动浏览器 —— 创建对应浏览器的驱动类对象(必须要设置好浏览器驱动程序文件)
        示例代码:

from selenium import webdriver
dr = webdrvier.Chrome() # 启动Chrome浏览器

        3. 驱动对象常用方法
      

驱动对象.get("url") —— 打开指定URL的页面
驱动对象.close() —— 关闭当前页面(如果关闭是浏览器中最后一个页面,整个浏览器也会退出)
驱动对象.quit() —— 退出浏览器,终止驱动程序

        定位页面元素的方法

        理解:8种定位页面元素策略、2套方式(返回单个页面元素、返回多个页面元素)
方式一:定位单个页面元素,返回的是WebElement。格式:find_element
        常用方法

驱动对象.find_element_by_id("id属性") —— 根据页面元素的id属性
驱动对象.find_element_by_name("name属性") —— 根据页面元素的name属性驱动对象.find_element_by_class_name("class样式名") —— 根据页面元素的”类样式名“
如果标签的class属性值中有空格,代表具有多个类样式名,我们只能用其中的一个样式名
驱动对象.find_element_by_tag_name("标签名") —— 根据标签名来定位元素驱动对象.find_element_by_link_text("超链接文本") —— 根据超链接标签的内部文本只对超链接标签(a标签)有用
驱动对象.find_element_by_partial_link_text("部分超链接文本")只对超链接标签(a标签)有用
驱动对象.find_element_by_css_selector("CSS选择器") —— 根据CSS选择器来定位元素
驱动对象.find_element_by_xpath("xpath") —— 根据XPATH表达式定位元素

        注意点:

定位单个元素的方法,返回值是找到的“页面元素”对象(WebElement)
页面元素.send_keys("内容") —— 向页面元素中输入内容
页面元素.clear() —— 清空输入框中的文本
页面元素.click() —— 单击页面元素
页面元素.get_attribute("属性名") —— 获取页面元素的标签属性
页面元素.text —— 获取页面元素的内部文本(开始标签和结束标签之间的
内容)
单个标签的页面元素,内部文本永远为空字符串。
如果页面上有多个匹配的元素,只返回其中一个元素。
尽量根据元素的唯一特定来定位
如果页面上没有匹配的元素,会报错:NoSuchElementException
没有找到这个元素


        方式二:定位多个页面元素,返回的是list。格式:find_elements
        常用方法

驱动对象.find_elements_by_id("id属性") —— 根据页面元素的id属性
驱动对象.find_elements_by_name("name属性") —— 根据页面元素的name属
性
驱动对象.find_elements_by_class_name("class样式名") —— 根据页面元素
的”类样式名“
如果标签的class属性值中有空格,代表具有多个类样式名,我们只能用其中
的一个样式名
驱动对象.find_elements_by_tag_name("标签名") —— 根据标签名来定位元素驱动对象.find_elements_by_link_text("超链接文本") —— 根据超链接标签的内部文本
只对超链接标签(a标签)有用
驱动对象.find_elements_by_partial_link_text("部分超链接文本")
只对超链接标签(a标签)有用
驱动对象.find_elements_by_css_selector("CSS选择器") —— 根据CSS选择
器来定位元素
驱动对象.find_elements_by_xpath("xpath") —— 根据XPATH表达式定位元素

注意点:

定位多个元素的方法,返回值是找到的“页面元素”的列表,是list。
列表中的元素是页面上的标签元素(WebElement)
如果页面上没有匹配的元素,不报错,只不过返回的列表长度为0


        4. 驱动对象的常用属性

驱动对象.title —— 获取当前页面窗口的标题
驱动对象.current_url —— 获取当前页面的URL 

        四、CSS选择器

标签名选择器 —— 语法: 标签名

h3 —— 匹配页面上所有的h3元素
a —— 匹配页面上的所有a标签

类样式选择器 —— 语法: .类样式名

.abc —— 匹配页面上的class="abc"的标签
.my-god —— 匹配页面上的class="my-god"的标签

ID选择器 —— 语法: #ID属性值

ID属性值是自定义的,它匹配页面上那些出现id="指定id属性值"的标签
#hot —— 匹配页面上的id="hot"的标签
#ok —— 匹配页面上的id="ok"的标签

属性选择器 —— 语法: [属性名="值"]

匹配页面上出现了指定属性且等于指定值的标签
[id=button] —— 找到id属性等于button的元素
[color='red'] —— 找到color属性等于red的元素
[value="登 录"] —— 找到value属性等于“登 录”的元素(引号当前必须打,因为属性值中
有空格)

上述的四种基础选择器的组合(表述标签在网页的层次结构)

选择器1 选择器2 —— 找到所有匹配“选择器1”里面的匹配“选择器2”的元素 —— 里面就行
p a —— 找到a标签,a标签的外面必须有p标签
.hot p .rf —— 找到所有的class为rf的标签,但是这些标签必须在p标签的里面,且p标签必须在有class为hot的元素内部。
选择器1 > 选择器2 —— 找到所有匹配“选择器1”的下一级匹配“选择器2”的元素 —— 必须是下
一级
p > a —— 找到a标签,a标签的父标签必须是p标签

        五、XPATH

xpath表达式可以用于在xml、html文件中,以”路径“的写法来定位文件中的“节点”
节点 —— 描述一个元素在html文件中的路径
注意:XPATH表达式必须是以节点为基础的
路径符号(xpath表达式是从文档的根开始计算的)

  • / —— 进入下一级节点
  • // —— 任意一级节点
/html/body/p/span/a —— 从根标签开始一级一级的向下找到符合路径的a标签
//p//a —— 找到所有在p标签里的a标签
//p/a —— 找到所有在p标签下一级的a标签

xpath里面的限定: 节点[限定条件]

语法总结:

  • 节点[N] —— 找父节点中第N个满足条件的子节点
  • 节点[last()] —— 找父节点中最后1个满足条件的子节点
  • 节点[@属性名="值"] —— 匹配具有指定属性值的节点(属性名前面要打@符号,值两
  • 边必须有引号)
  • 节点[text()="值"] —— 匹配内部文本等于指定值的节点
  • 节点[contains(text(), "值")] —— 匹配内部文本中含有指定值的元素节点[contains(@属性名, "值")] —— 匹配指定属性含有指定值的元素
  • 节点[starts-with(@属性名, "值")] —— 匹配指定属性以指定值开头的元素
  • 节点[条件1 and 条件2] —— 匹配同时满足条件1和条件2的节点节点[条件1 or条件2] —— 匹配同时满足条件1或者条件2的节点节点[not(条件)] —— 匹配不满足指定条件的节点

示例代码:

//p[1] —— 找到是其父标签中的第1个子段落标签
//div/p[last()] —— 找到是其父标签中的最后一个子段落标签
//div[@class='poem']/p[last()] —— 找到父标签是div且有class属性等于poem的下面
的p标签中的最后一个
//*[@name='email'] —— 找到任意一级的任意元素,但它的name属性必须等于email
//a[text()='注册'] —— 找到内部文本等于“注册”的a标签元素
//span[text()="注意"] —— 找到内部文本等于“注意”的span标签元素
//*[contains(text(), '注')] —— 找到任意的标签中,内部文本包含“注”的所有元素
//li[contains(@id, 'stu')] —— 找到id属性中包含了stu的li元素
//li[starts-with(@id, 'stu')] —— 找到id属性以包stu打头的li元素
找到所有id属性以“yw”或者id属性以“sx”打头的li元素
//li[starts-with(@id, 'yw') or starts-with(@id, 'sx')]
找到所有id属性不以“stu”打头,但含有“stu”的li元素
//li[not(starts-with(@id, 'stu')) and contains(@id, 'stu')]

        六、使用selenium + unittest编写自动化测试的用例代码

用unittest来组织一个测试点的相关测试用例,会把一个测试点的系统测试用例中重要的用例选择出来,转换(写)成自动化测试用例代码,一条测试用例对应一个测试方法,真正操作浏览器、定位元素、操作元素的代码,是写在每个测试方法中,在测试方法中写断言,如果多个测试方法有一些共同要先执行、最后执行的代码,可以定义“固件方法”来实现:

如果在setUp方法中创建了浏览器驱动,记得用 self.驱动对象 =
在测试方法中,均用 self.驱动对象.

示例套件:

import unittest
from selenium import webdriver

class 测试类名(unittest.TestCase):
    def setUp(self):
    # 启动浏览器、打开XXX页面
        self.driver = webdriver.Chrome()
        self.driver.get("XXX")
   
    def tearDown(self):
        self.driver.quit()

    def test_测试方法1(self):
    # 这里面写操作浏览器的代码
    # self.driver
    # 进行断言

    def test_测试方法2(self):
    # 这里面写操作浏览器的代码
    # self.driver
    # 进行断言


if __name__ == '__main__':
unittest.main()

        七、使用Select类来操作页面上的下拉框

构建一个代表页面上某个下拉框的Select类的对象

示例代码:

from selenium.webdriver.support.select import Select
下拉框 = Select(驱动对象.find_element_by_xxx("下拉框元素的定位特征"))

 三个选中选项的方法

示例代码:

下拉框.select_by_visible_text("本科") # 根据选项标签的内部文本,选中选项
下拉框.select_by_value("cz") # 根据选项标签的value属性,选中选项
下拉框.select_by_index(6) # 根据选项标签的索引(从0开始),选中选项

一个代表所有选项元素列表的属性 —— options

示例代码:

for elem in 下拉框.options:
# elem就是页面上下拉框中每个选项的页面元素elem.click()

        八、使用By类的类属性,来代表元素定位的策略

selenium将定位元素的八种策略,定义在了By类中,用8个类属性来代表

By类需要导入:

from selenium.webdriver.common.by import By

使用方式:无论定位单个元素还是多个元素,喜欢用“短款”的定位方法文章来源地址https://www.toymoban.com/news/detail-850056.html

  • 驱动对象.find_element(By.XXX, "值")
  • 驱动对象.find_elements(By.XXX, "值")

到了这里,关于Selenium——基于Web的UI自动化测试工具(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 比selenium体验更好的ui自动化测试工具: cypress介绍

    话说 Cypress is a next generation front end testing tool built for the modern web. And Cypress can test anything that runs in a browser.Cypress consists of a free, open source, locally installed Test Runner and a Dashboard Service for recording your tests. 吹的挺好哈,那咱也来尝试玩玩,试试,哈哈! 1、在Windows 7以上的环境中,可

    2024年01月16日
    浏览(47)
  • UI自动化测试之selenium工具(浏览器窗口的切换)

    1、在浏览网页的时候,有时点击一个链接或者按钮,会弹出一个新的窗口。这类窗口也被称之为句柄(一个浏览器窗口的唯一标识符,通过句柄实现不同浏览器窗口之间的切换),在我们手动控制浏览器的时候,产生新的句柄时浏览器会自动的帮我们跳转到最新的句柄处(鼠

    2024年02月02日
    浏览(51)
  • Python Selenium4.3.0(新语法) web自动化测试工具

    1 介绍 Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。 支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera,Edge等 这个工具的主要功能包括:测试与浏览器的兼容性——测试应用程序看是否能够

    2024年01月24日
    浏览(51)
  • 一文带你深入浅出Web的自动化测试工具Selenium【建议收藏】

    为了巩固所学的知识,作者尝试着开始发布一些学习笔记类的博客,方便日后回顾。当然,如果能帮到一些萌新进行新技术的学习那也是极好的。作者菜菜一枚,文章中如果有记录错误,欢迎读者朋友们批评指正。 (博客的参考源码可以在我主页的资源里找到,如果在学习的

    2024年02月05日
    浏览(49)
  • selenium-java web自动化测试工具抓取百度搜索结果实例

     🔥 交流讨论: 欢迎加入我们一起学习! 🔥 资源分享 : 耗时200+小时精选的「软件测试」资料包 🔥  教程推荐: 火遍全网的《软件测试》教程   📢 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! selenium-java web自动化测试工具抓取百度搜索结果实例 这种方式抓百度

    2024年03月14日
    浏览(68)
  • 基于图片识别的 UI 自动化测试工具 SikuliX

    简介 SikuliX 是一款开源的 GUI自动化测试工具,它的前身是 Sikuli(上帝之眼).SikuliX 在设计上使用到了图片识别技术,会通过不停的对桌面进行截图,然后与预期图片进行比较来判断交互条件.因此我们可以很方便的通过定义图片来设置交互条件如下: 上面就是通过SikuliX实现的一个简

    2024年02月01日
    浏览(55)
  • web UI 自动化测试:Selenium 语法详解 史上最全

    selenium主要是用来做自动化测试,支持多种浏览器,爬虫中主要用来解决JavaScript渲染问题。模拟浏览器进行网页加载 一、声明浏览器对象 二、访问页面并获取网页html 三、查找元素 单个元素 常用的查找方法 也可以使用通用的方法 四、元素交互操作-搜索框传入进行自

    2024年02月21日
    浏览(65)
  • Web UI 自动化测试框架(Pytest+Selenium+Allure+Loguru)

    本框架主要是基于 Python + pytest + selenium + Allure + loguru + 邮件通知/企业微信通知/钉钉通知 实现的WEB UI自动化框架。 基于PageObject设计模式结合,该平台可实现测试用例的自动化执行及自动化测试报告的生成同时包括自动化测试执行时,用例失败的截图操作。 使用webdriver_manag

    2024年02月04日
    浏览(133)
  • 【自动化测试】基于Selenium + Python的web自动化框架

    Selenium是一个基于浏览器的自动化工具,她提供了一种跨平台、跨浏览器的端到端的web自动化解决方案。Selenium主要包括三部分:Selenium IDE、Selenium WebDriver 和Selenium Grid:  1、Selenium IDE:Firefox的一个扩展,它可以进行录制回放,并可以把录制的操作以多种语言(例如java,p

    2024年02月07日
    浏览(78)
  • selenium-基于UI的自动化测试框架

      自动化测试是指软件测试的自动化,在预设状态下运行应用程序或者系统,预设条件包括正常和异常,最后评估运行结果,将人为驱动的测试行为转化为机器执行的过程   自动化测试包括UI自动化、接口自动化、单元测试自动化。按照这个金字塔模型来进行自动化测试

    2024年02月05日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包