自动化测试之Selenium的使用

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

selenium 自动化测试 浏览器使用,软件测试,技术分享,自动化测试,selenium,python,测试工具,自动化测试,测试工程师

06、Selenium的使用

Selenium 是一个自动化测试工具,利用它可以驱动浏览器执行特定的动作,如点击、下拉等操作,同时还可以获取浏览器当前呈现的页面的源代码,做到可见即可爬。对于一些 JavaScript 动态渲染的页面来说,此种抓取方式非常有效。

由于新版Chrome 已经支持无头模式可以替换PhantomJS,下面仅以 Chrome 为例:

获取单个节点的方法

selenium 自动化测试 浏览器使用,软件测试,技术分享,自动化测试,selenium,python,测试工具,自动化测试,测试工程师

下面我们希望可以访问淘宝页面并进行搜索

selenium 自动化测试 浏览器使用,软件测试,技术分享,自动化测试,selenium,python,测试工具,自动化测试,测试工程师

可以发现,它的 id 是 q,name 也是 q。则可以通过find_element_by_name() 和find_element_by_id() 或 XPath、CSS 选择器获取该节点。

selenium 自动化测试 浏览器使用,软件测试,技术分享,自动化测试,selenium,python,测试工具,自动化测试,测试工程师

从结果可以看到这四种方式获取到的节点完全一致。

另外,Selenium 还提供了通用方法 find_element(),它需要传入两个参数:查找方式 By 和值。实际上,它就是 find_element_by_id() 这种方法的通用函数版本,比如 find_element_by_id(id) 就等价于 find_element(By.ID, id),二者得到的结果完全一致。上面的代码等价于:

selenium 自动化测试 浏览器使用,软件测试,技术分享,自动化测试,selenium,python,测试工具,自动化测试,测试工程师

07、获取多个节点

如果查找的目标在网页中只有一个,那么完全可以用 find_element() 方法。如果有多个节点,只需要用 find_elements() 方法即可,相对原有的方法多个s。

selenium 自动化测试 浏览器使用,软件测试,技术分享,自动化测试,selenium,python,测试工具,自动化测试,测试工程师

例如我们想获取淘宝左侧导航条的所有条目:

selenium 自动化测试 浏览器使用,软件测试,技术分享,自动化测试,selenium,python,测试工具,自动化测试,测试工程师

selenium 自动化测试 浏览器使用,软件测试,技术分享,自动化测试,selenium,python,测试工具,自动化测试,测试工程师

结果:

selenium 自动化测试 浏览器使用,软件测试,技术分享,自动化测试,selenium,python,测试工具,自动化测试,测试工程师

find_element() 方法,只能获取匹配的第一个节点,结果是 WebElement 类型。如果用 find_elements() 方法,则结果是列表类型,列表中的每个节点是 WebElement 类型。

08、节点交互

Selenium 可以驱动浏览器来执行一些操作,也就是说可以让浏览器模拟执行一些动作。比较常见的用法有:输入文字时用 send_keys 方法,清空文字时用 clear 方法,点击按钮时用 click 方法。示例如下:

selenium 自动化测试 浏览器使用,软件测试,技术分享,自动化测试,selenium,python,测试工具,自动化测试,测试工程师

更多交互操作可参考:

https://selenium-python-zh.readthedocs.io/en/latest/api.html#module-selenium.webdriver.remote.webelement

09、动作链与切换Frame

在上面的实例的交互动作中都是针对某个节点执行的。比如,输入框的输入文字和清空文字方法,按钮的点击方法。而动作链操作没有特定的执行对象,比如鼠标拖曳、键盘按键等。

下面实现一个节点的拖曳操作,将某个节点从一处拖曳到另外一处:

selenium 自动化测试 浏览器使用,软件测试,技术分享,自动化测试,selenium,python,测试工具,自动化测试,测试工程师

依次选中要拖曳的节点和拖曳到的目标节点,接着声明 ActionChains 对象调用其 drag_and_drop() 方法申明拖拽动作,最后调用 perform() 方法执行动作:

selenium 自动化测试 浏览器使用,软件测试,技术分享,自动化测试,selenium,python,测试工具,自动化测试,测试工程师

更多的动作链可参考官方文档:https://selenium-python-zh.readthedocs.io/en/latest/api.html#module-selenium.webdriver.common.action_chains

网页中有一种节点叫做 iframe,也就是子 Frame,相当于页面的子页面,它的结构和外部网页的结构完全一致。Selenium 打开页面后,它默认是在父级 Frame 里面操作,而此时如果页面中还有子 Frame,它是不能获取到子 Frame 里面的节点的。这时就需要使用 switch_to.frame() 方法来切换 Frame。

selenium 自动化测试 浏览器使用,软件测试,技术分享,自动化测试,selenium,python,测试工具,自动化测试,测试工程师

结果:

selenium 自动化测试 浏览器使用,软件测试,技术分享,自动化测试,selenium,python,测试工具,自动化测试,测试工程师

通过 switch_to.frame() 方法切换到子 Frame 里面,然后尝试获取子 Frame 里的 logo 节点(这是不能找到的),如果找不到的话,就会抛出 NoSuchElementException 异常,异常被捕捉之后,就会输出 NO LOGO。接下来,重新切换回父级 Frame,然后再次重新获取节点,发现此时可以成功获取了。

10、执行 JavaScript

例如我们可以通过执行 JavaScript来滑动窗口,或弹出提示:

selenium 自动化测试 浏览器使用,软件测试,技术分享,自动化测试,selenium,python,测试工具,自动化测试,测试工程师

execute_script() 方法即可执行JavaScript。

11、获取节点信息

通过 page_source 属性可以获取网页的源代码,接着就可以使用解析库(如正则表达式、Beautiful Soup、pyquery 等)来提取信息。

但 Selenium 选择节点返回的 WebElement 类型,也有提取节点信息的方法,不需要使用额外的解析库。

获取属性:

get_attribute() 方法获取知乎发现页面第一张图片的地址:

selenium 自动化测试 浏览器使用,软件测试,技术分享,自动化测试,selenium,python,测试工具,自动化测试,测试工程师

结果如下:

selenium 自动化测试 浏览器使用,软件测试,技术分享,自动化测试,selenium,python,测试工具,自动化测试,测试工程师

获取文本值、ID、位置、标签名、大小:

WebElement 节点的 text 属性可以返回对应节点的文本内容,ID、位置、标签名、大小也有相应的属性可以获取:

selenium 自动化测试 浏览器使用,软件测试,技术分享,自动化测试,selenium,python,测试工具,自动化测试,测试工程师

12、延时等待

有时某些页面有额外的 Ajax 请求,直接获取某些节点可能会有获取失败,这时可以通过延时等待一定时间,确保节点已经加载出来。

等待的方式包括 隐式等待 和 显式等待。

隐式等待

当查找节点而节点并没有立即出现的时候,隐式等待将等待一段时间后再查找 DOM,超过设定时间仍未找到则抛出找不到节点的异常。

用 implicitly_wait() 方法可实现隐式等待:

selenium 自动化测试 浏览器使用,软件测试,技术分享,自动化测试,selenium,python,测试工具,自动化测试,测试工程师

显式等待:

显式等待指定了一个最长等待时间,在规定时间内加载出要查找的节点,就返回该节点;如果到了规定时间依然没有加载出该节点,则抛出超时异常。相对固定等待时间的隐式等待一般会节省一些等待时间。显式等待简单来说,就是直到元素出现才去操作,如果超时则报异常。隐式等待是每隔一小段时间就去查找一下需要查找的节点,超时仍未找到则抛异常。

显式等待示例:

selenium 自动化测试 浏览器使用,软件测试,技术分享,自动化测试,selenium,python,测试工具,自动化测试,测试工程师

presence_of_element_located 条件代表节点出现,其参数是节点的定位元组。element_to_be_clickable条件代表节点可点击。

WebDriverWait 对象指定最长等待时间,调用 until() 方法传入要等待的条件。

常见等待条件有:

selenium 自动化测试 浏览器使用,软件测试,技术分享,自动化测试,selenium,python,测试工具,自动化测试,测试工程师

selenium 自动化测试 浏览器使用,软件测试,技术分享,自动化测试,selenium,python,测试工具,自动化测试,测试工程师

更多详细的等待条件的参数及用法介绍可以参考官方文档:

https://selenium-python-zh.readthedocs.io/en/latest/api.html#module-selenium.webdriver.support.expected_conditions

13、下拉滚动

有时需要借助滚动条来拖动屏幕,使被操作的元素显示在当前的屏幕上。滚动条是无法直接用定位工具来定位的。Selenium 里面也没有直接的方法去控制滚动条,这时候只能借助 JS 来完成了,可以用 selenium 提供的 execute_script() 方法操作,就可以直接执行 JS 脚本。

通过修改 scrollTop 的值,来定位右侧滚动条的位置,0是最上面,100000是最底部。

selenium 自动化测试 浏览器使用,软件测试,技术分享,自动化测试,selenium,python,测试工具,自动化测试,测试工程师

selenium 自动化测试 浏览器使用,软件测试,技术分享,自动化测试,selenium,python,测试工具,自动化测试,测试工程师

前进后退

平常使用浏览器时都有前进和后退功能,Selenium 也可以完成这个操作,它使用 back() 方法后退,使用 forward() 方法前进。示例如下:

14、Cookies

selenium 自动化测试 浏览器使用,软件测试,技术分享,自动化测试,selenium,python,测试工具,自动化测试,测试工程师

15、选项卡管理

selenium 自动化测试 浏览器使用,软件测试,技术分享,自动化测试,selenium,python,测试工具,自动化测试,测试工程师

结果

selenium 自动化测试 浏览器使用,软件测试,技术分享,自动化测试,selenium,python,测试工具,自动化测试,测试工程师

16、异常处理

在使用 Selenium 的过程中,难免会遇到一些异常,例如超时、节点未找到等错误,一旦出现此类错误,程序便不会继续运行了。这里我们可以使用 try except 语句来捕获各种异常。

selenium 自动化测试 浏览器使用,软件测试,技术分享,自动化测试,selenium,python,测试工具,自动化测试,测试工程师

关于更多的异常类,可以参考官方文档:https://selenium-python-zh.readthedocs.io/en/latest/api.html#module-selenium.common.exceptions

17、无头模式

Chrome 浏览器从 60 版本已经支持了无头模式,无头模式在运行的时候不会再弹出浏览器窗口,它减少了一些资源的加载,也在一定程度上节省了资源加载时间。

我们可以借助于 ChromeOptions 来开启 Chrome Headless 模式,代码实现如下:

selenium 自动化测试 浏览器使用,软件测试,技术分享,自动化测试,selenium,python,测试工具,自动化测试,测试工程师

通过 ChromeOptions 的 add_argument 方法添加了一个参数 --headless即可开启无头模式, Chrome 窗口就不会再弹出来了。

18、反屏蔽

使用正常的浏览器和Selenium启动一个 Chrome 的有头模式打开如下网址:https://bot.sannysoft.com/。可以看到:

selenium 自动化测试 浏览器使用,软件测试,技术分享,自动化测试,selenium,python,测试工具,自动化测试,测试工程师

显然Selenium暴露了一些特征,我们需要想办法清除这些信息。

清空webdriver信息的JavaScript代码是:

selenium 自动化测试 浏览器使用,软件测试,技术分享,自动化测试,selenium,python,测试工具,自动化测试,测试工程师

不过我需要通过CDP(即 Chrome Devtools-Protocol,Chrome 开发工具协议)实现在每个页面刚加载的时候执行 JavaScript 代码,隐藏一些特征信息。

88版本完整解决方案:

selenium 自动化测试 浏览器使用,软件测试,技术分享,自动化测试,selenium,python,测试工具,自动化测试,测试工程师

实验性功能参数 excludeSwitches的值设为 ['enable-automation']可以关闭Chrome 正在受自动化测试工具控制的提示条,useAutomationExtension设为False则关闭了以开发者模式运行扩展程序。

设置两个普通参数使后续代码能够生效。使用 CDP执行的JavaScript代码是专门用来隐藏 Selenium 或 Pyppeteer的特征的,由puppeteer-extra-plugin-stealth的作者写的extract-stealth-evasions工具生成。

具体生成方法可参考:

puppeteer-extra-plugin-stealth: https://github.com/berstend/puppeteer-extra/tree/master/packages/puppeteer-extra-plugin-stealth

extract-stealth-evasions: https://github.com/berstend/puppeteer-extra/tree/master/packages/extract-stealth-evasions

可直接从https://github.com/kingname/stealth.min.js下载某位大佬已经生成好的。

即使处在无头模式下,也可以隐藏WebDriver信息:

selenium 自动化测试 浏览器使用,软件测试,技术分享,自动化测试,selenium,python,测试工具,自动化测试,测试工程师

selenium 自动化测试 浏览器使用,软件测试,技术分享,自动化测试,selenium,python,测试工具,自动化测试,测试工程师


最后: 为了回馈铁杆粉丝们,我给大家整理了完整的软件测试视频学习教程,朋友们如果需要可以自行免费领取 【保证100%免费】

selenium 自动化测试 浏览器使用,软件测试,技术分享,自动化测试,selenium,python,测试工具,自动化测试,测试工程师

加入我的软件测试交流群:110685036免费获取~(同行大佬一起学术交流,每晚都有大佬直播分享技术知识点)

软件测试面试小程序

被百万人刷爆的软件测试题库!!!谁用谁知道!!!全网最全面试刷题小程序,手机就可以刷题,地铁上公交上,卷起来!

涵盖以下这些面试题板块:

1、软件测试基础理论 ,2、web,app,接口功能测试 ,3、网络 ,4、数据库 ,5、linux

6、web,app,接口自动化 ,7、性能测试 ,8、编程基础,9、hr面试题 ,10、开放性测试题,11、安全测试,12、计算机基础

selenium 自动化测试 浏览器使用,软件测试,技术分享,自动化测试,selenium,python,测试工具,自动化测试,测试工程师

获取方式 :

selenium 自动化测试 浏览器使用,软件测试,技术分享,自动化测试,selenium,python,测试工具,自动化测试,测试工程师文章来源地址https://www.toymoban.com/news/detail-766740.html

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

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

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

相关文章

  • Selenium浏览器自动化测试框架

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

    2024年02月02日
    浏览(50)
  • 自动化测试——selenium多浏览器处理

    用户使用的浏览器(frefox,chrome,IE 等) web应用应该能在任何浏览器上正常的工作,这样能吸引更多的用户来使用。 是跨不同浏览器组合验证网站或web应用程序功能的过程 是 兼容性测试的一个分支,用于保持功能和质量的一致性 适用于面向客户的网站和组织内部使用的站点 py

    2024年02月11日
    浏览(52)
  • Selenium浏览器自动化测试框架详解

    目录   selenium简介 介绍 功能 优势 基本使用 获取单节点 获取多节点 节点交互 动作链# 执行JavaScript代码 获取节点信息 切换frame 延时等待 前进和后退 cookies 选项卡管理 异常处理 ​编辑 选项卡切换 无头浏览器 总结: Selenium [1] 是一个用于Web应用程序测试的工具。Selenium测试

    2024年02月08日
    浏览(49)
  • Selenium教程:自动化浏览器测试工具

    Selenium是一款用于自动化浏览器测试的工具,它提供了一系列的API和功能,使得开发人员可以编写脚本来模拟用户在浏览器中的行为。无论是在Web应用程序的功能测试、性能测试还是数据抓取方面,Selenium都是一个强大且广泛使用的工具。 在开始使用Selenium之前,您需要进行安

    2024年02月07日
    浏览(75)
  • python自动化测试selenium浏览器操作

    2024年02月16日
    浏览(66)
  • selenium浏览器自动化测试【基于java】

    Selenium 是一个用于Web应用程序的自动化测试工具。它直接运行在浏览器中,可以模拟用户在浏览器上面的行为操作。 chrome.exe 默认安装位置:C:Program FilesGoogleChromeApplicationchrome.exe 结果我的在:C:Users91073AppDataLocalGoogleChromeApplicationchrome.exe 。。。为啥? 下载驱动 最新

    2024年02月04日
    浏览(49)
  • Selenium浏览器自动化测试框架简单介绍

    目录 selenium简介 介绍 功能 优势 基本使用 获取单节点 获取多节点 节点交互 动作链 执行JavaScript代码 获取节点信息 切换frame 延时等待 前进和后退 cookies 选项卡管理 异常处理 选项卡切换 无头浏览器 介绍 Selenium [1]  是一个用于Web应用程序测试的工具。Selenium测试直接运行在

    2024年02月13日
    浏览(38)
  • Edge浏览器做web自动化测试(selenium)

    查看浏览器设置看edge浏览器版本   下载edge浏览器对应版本驱动 Microsoft Edge WebDriver - Microsoft Edge Developer   下载完毕后压缩包    后面请参考selenium使用 selenium自动化测试(初窥门径)_邓霖涛的博客-CSDN博客 在导入selenium的maven 相关依赖可以用选择edge的驱动   测试代码如下:  执

    2024年02月12日
    浏览(40)
  • 软件测试/测试开发丨Selenium Web自动化多浏览器处理

    本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接:https://ceshiren.com/t/topic/27185 用户使用的浏览器(firefox,chrome,IE 等) web 应用应该能在任何浏览器上正常的工作,这样能吸引更多的用户来使用 是跨不同浏览器组合验证网站或 web 应用程序功能的过程 是兼容性测试的一个

    2024年02月09日
    浏览(62)
  • Selenium浏览器交互原理与应用,玩转Web自动化测试

      目录  前言: 浏览器交互: Selenium的实现方式: Selenium WebDriver: WebDriver的等待机制: 总结:  Web自动化

    2024年02月08日
    浏览(50)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包