技术干货——Selenium Python使用技巧(二)

news2025/1/12 9:01:23

目录

进行自动跨浏览器测试

使用CSS定位器

WebElement的HTML源代码

鼠标悬停

关闭标签而不是浏览器

处理下拉菜单

复选框处理

通过CSS选择器选择元素

总结:


进行自动跨浏览器测试

您可能需要在多种情况下针对不同的浏览器(例如Firefox,Chrome,Internet Explorer,Edge)测试代码。跨不同浏览器测试网站的做法称为自动浏览器测试。要使用Selenium自动化测试执行自动浏览器测试,您应该在单元测试代码或pytest代码中合并对这些浏览器的选择性处理。下面显示了一个代码片段(利用pytest)来处理多个浏览器:

''' 导入必要的包和类 '''

import pytest
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys
from time import sleep

@pytest.fixture(params=["chrome", "firefox"],scope="class")
def driver_init(request):
    if request.param == "chrome":
        # 搞点事情
    if request.param == "firefox":
        # 搞定事情
    yield
    web_driver.close()
    ...........
    ...........

使用CSS定位器

使用Selenium执行测试自动化时,在页面上定位Web元素是自动化脚本的基础。如果您想基于特定种类的Web元素(如Tag,Class,ID等)的存在来执行条件执行,则可以使用find_elements _ *** API。下面提到其中一些

  • find_elements_by_class_name():按类名称查找元素

  • find_elements():按策略和定位器查找元素

  • find_element_by_link_text():通过链接文本查找元素

  • find_element_by_partial_link_text():通过链接文本的部分匹配来查找元素

下面显示的是find_element_by_partial_link_text()find_elements_by_class_name()的用法,其中在受测试的URL页面上搜索了元素。

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys
from time import sleep
from selenium.common.exceptions import NoSuchElementException

driver = webdriver.Firefox()
driver.get("https://www.***.com")

try:
    element = driver.find_element_by_partial_link_text("START TESTING")
    print("元素找到了")
    element = driver.find_elements_by_class_name('home-btn-2')
    print(“按钮找到了”)
except NoSuchElementException:
    print("元素没找到")
    
sleep(10)
driver.close()

WebElement的HTML源代码

innerHTML属性可用于捕获WebPage的源代码。自页面首次由网络浏览器加载以来,innerHTML还用于检查页面中的任何更改。您可以将整个源代码编写为.html文件,以备将来参考。

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys
from time import sleep
import io

driver = webdriver.Firefox()
driver.get("https://www.***.com")

elem = driver.find_element_by_xpath("//*")
source_code = elem.get_attribute("innerHTML")

filename = open('page_source.html', 'w')
filename.write(source_code)
filename.close()
    
sleep(10)

driver.close()

鼠标悬停

在某些情况下,您可能需要单击作为菜单一部分的项目或作为多级菜单一部分的项目。首先,我们找到菜单项,然后在所需的菜单项上执行单击操作。

在下面的示例中,在导航到主页上的“Automation”选项卡。第一个任务是Menu中找到某个元素 。通过使用检查工具,我们可以获得正确的element-id,详细信息如快照中所示:

我们使用move_to_element()操作移动到菜单,该操作是action_chains模块的一部分。下一个任务是找到包含文本Automation的菜单项,我们将使用find_element_by_xpath(“//a[contains(text(),'Automation')]”)))进行单击操作。

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from time import sleep
    
driver = webdriver.Firefox()
driver.get("https://www.***.com")

action = ActionChains(driver);

parent_level_menu = driver.find_element_by_id("bs-example-navbar-collapse-1")
action.move_to_element(parent_level_menu).perform()

child_level_menu = driver.find_element_by_xpath("//a[contains(text(),'Automation')]")
child_level_menu.click();

sleep(10)

driver.close()

关闭标签而不是浏览器

对于任何测试自动化Selenium脚本,最基本但必不可少的技巧之一是实现如何在不关闭整个浏览器的情况下关闭选项卡。driver.close()关闭当前选项卡,driver.quit()将关闭(浏览器的)所有选项卡,并退出驱动程序。如果需要保持浏览器窗口打开(并退出所有其他选项卡),则可以使用switch_to.window()方法,该方法的输入参数为window handle-id

  • 注:还有其他方法可以解决此问题。window.open()方法可以与适当的选项一起使用(例如,打开新窗口,打开新选项卡等)。可以使用使用send_keys()发送正确的组合键,但是该行为取决于geckodriver版本(对于Firefox),chromedriver版本等。因此,send_keys()方法不是可取的,因为输出会根据WebDriver版本而有所不同。

在下面的示例中,我们打开一个包含测试URL的新窗口,然后关闭其他窗口。我们仅使用window_handles来达到要求。

from selenium import webdriver
import time
 
driver = webdriver.Firefox()
driver.get('https://www.google.com')
# 打开新窗口
driver.execute_script("window.open('');")
time.sleep(5)
# 切换窗口
driver.switch_to.window(driver.window_handles[1])
driver.get("https://***.com")
time.sleep(5)
# 关闭
driver.close()
time.sleep(5)
# 切换回就窗口
driver.switch_to.window(driver.window_handles[0])
driver.get("https://www.***.com")
time.sleep(5)
# 关闭窗口
#driver.close()

处理下拉菜单

有一个需求,必须从网页上的下拉菜单中选择一个特定的选项。您可以通过多种方式从下拉菜单中选择所需的选项。

  • select_by_index(期望的索引值)

  • select_by_visible_text(“文本信息”)

  • select_by_value(值)

我们从下拉菜单中选择所需元素之前,获取被测元素的ID非常重要。我们使用find_element_by_xpath()方法来定位该元素,并且一旦找到该元素(使用ID),便从下拉菜单中选择该值。

在下面的示例中,我们显示了可以从菜单中选择元素的不同方法(@ aria-label ='select'

from selenium import webdriver
from selenium.webdriver.support.ui import Select
from time import sleep
from selenium.common.exceptions import NoSuchElementException
from pip._vendor.distlib import resources

driver = webdriver.Firefox()
driver.get("http://demos.*****/test_Menu.html")

sleep(5)

try:
    select_element = Select(driver.find_element_by_xpath("//select[@aria-label='select']"))
    select_element.select_by_visible_text("bleed through")
    sleep(5)
    select_element.select_by_index(0)
    sleep(5)
except NoSuchElementException:
    print("元素查找失败")

sleep(5)

driver.quit()

复选框处理

复选框是网页中的常见元素,用于您必须从多个选项中仅选择一个选项的情况下。像下拉菜单处理一样,我们使用find_element_by_xpath()方法找到所需的复选框,一旦找到该复选框,就会执行单击操作。

我们将使用Selenium自动化测试,并且选中的复选框。使用driver.find_elements_by_xpath(“//*[contains(text(),'文本')]”)完成操作。

from selenium import webdriver
from selenium.webdriver.support.ui import Select
from time import sleep
from selenium.common.exceptions import NoSuchElementException
from pip._vendor.distlib import resources

driver = webdriver.Firefox()
driver.get("http://demos.***test_CheckBox.html")

sleep(5)

try:
    driver.find_element_by_xpath("//*[contains(text(), 'cb7: normal checkbox')]").click()
except NoSuchElementException:
    print("元素查找失败")

sleep(5)

driver.quit()

通过CSS选择器选择元素

在使用Selenium执行测试自动化时,可以使用CSS定位器来定位网页上的元素。find_elements_by_css_selector()可以用于定位必须将要定位的元素详细信息(标签,链接,ID等)作为输入参数传递的元素。它通过CSS Selector在该元素的子元素中找到元素列表。

目的是使用find_elements_by_css_selector()在https://***.com/上找到“登录”按钮并执行单击操作。与登录相关的代码如下。代码检查工具快照还提供了所需的信息。

<html>
........
<li class="login">
<a href="https://accounts.***.com/register">Free Sign Up</a>
</li>
.....
</html>

因此,我们将li.login作为参数传递给find_elements_by_css_selector(),一旦找到元素,就执行Click操作。

from selenium import webdriver
from selenium.webdriver.support.ui import Select
from time import sleep
from selenium.common.exceptions import NoSuchElementException
from pip._vendor.distlib import resources

driver = webdriver.Firefox()
driver.get("https://www.***.com/")

sleep(5)

try:
    driver.find_element_by_css_selector("li.login").click()
except NoSuchElementException:
    print("Element not found")

sleep(5)

driver.quit()

 

总结:

感谢每一个认真阅读我文章的人!!!

我个人整理了我这几年软件测试生涯整理的一些技术资料,包含:电子书,简历模块,各种工作模板,面试宝典,自学项目等。欢迎大家点击下方名片免费领取,千万不要错过哦。

   Python自动化测试学习交流群:全套自动化测试面试简历学习资料获取点击链接加入群聊【python自动化测试交流】:http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=DhOSZDNS-qzT5QKbFQMsfJ7DsrFfKpOF&authKey=eBt%2BF%2FBK81lVLcsLKaFqnvDAVA8IdNsGC7J0YV73w8V%2FJpdbby66r7vJ1rsPIifg&noverify=0&group_code=198408628

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/703852.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软件测试工程师的工作内容?告诉你们什么是真正的测试工程师

目录 前言 1.何为软件测试工程师&#xff1f; 2.软件测试工程师的职责&#xff1f; 3.为什么要做软件测试&#xff1f; 4.软件测试的前途如何&#xff1f; 5.工具和思维谁更重要&#xff1f; 6.测试和开发相差大吗&#xff1f; 7.成为测试工程师的必备条件 8.测试的分…

shiro和redis一起使用

Shiro 缓存配置 当我们进行授权操作时,每次都会从数据库查询用户权限信息,为了提高授权性能,可以将用户权限信息查询出来以后进行缓存,下次授权时从缓存取数据即可。 Shiro 中内置缓存应用实现,其步骤如下: 第一步:在 SpringShiroConfig 中配置缓存 Bean 对象(Shiro 框架提供)…

Talk | 阿姆斯特丹大学博士生胡涛:计算机视觉中的标签效率学习

本期为TechBeat人工智能社区第509期线上Talk&#xff01; 北京时间6月29日(周四)20:00&#xff0c;阿姆斯特丹大学博士生—胡涛的Talk将准时在TechBeat人工智能社区开播&#xff01; 他与大家分享的主题是: “计算机视觉中的标签效率学习”&#xff0c;届时将从生成式学习、数…

Drools用户手册翻译——第二章 入门(上)

因为篇幅原因&#xff0c;所以分为上下两个部分&#xff0c;主要就是通过一个交通违章项目的例子&#xff0c;带你先粗略感受一下决策模型的使用流程&#xff0c;总体来说有详细&#xff0c;也有没说清的地方&#xff0c;如果想要了解一下决策模型&#xff0c;可以进来了解一下…

试用有奖:在线试用stable diffusion 模型生成优质人物好图

一、活动介绍 InsCode是一个集成了在线IDE、在线AI编程、在线算力租赁、在线项目部署以及在线SD 模型使用的综合代码开发平台。不论你是初级软件工程师&#xff0c;还是AI大模型爱好者&#xff0c;InsCode都能帮助你快速编写代码&#xff0c;运行项目。甚至在这里你还可以一键…

某平台登录之电话号码加密

抓包 POST /******/common/****** HTTP/1.1 Host: ****** Content-Type: application/json; charsetUTF-8 Host: ****** User-Agent: okhttp/3.14.9{"type":"login","apor":"******************"}加密 由于信息原因就不泄露了 此处只…

Linux系统编程:进程的创建、终止和替换

目录 一. 进程创建 1.1 fork函数的使用 1.2 fork函数的底层实现 1.3 子进程创建的写时拷贝问题 二. 进程的退出 2.1 进程退出的场景和方法 2.2 exit和_exit函数 三. 进程的等待 3.1 为什么要有进程等待 3.2 进程等待的方法 3.2.1 进程等待的相关函数 3.2.2 进程的阻…

JS知识点汇总(六)--作用域链this

1. 什么是作用域链&#xff1f; 作用域&#xff0c;即变量&#xff08;变量作用域又称上下文&#xff09;和函数生效&#xff08;能被访问&#xff09;的区域或集合 换句话说&#xff0c;作用域决定了代码区块中变量和其他资源的可见性 1. 作用域分类 一般将作用域分成&#x…

TDengine 发布 IoT 场景下 3.0 性能对比分析报告,全方位超越 InfluxDB TimescaleDB

6 月 26 日&#xff0c;涛思数据旗下时序数据库&#xff08;Time Series Database&#xff09; TDengine 正式发布 IoT 场景下 TDengine 3.0 性能对比分析报告&#xff0c;该报告在 IoT 场景下从数据写入、压缩和查询等维度&#xff0c;对比了 TDengine 与市场其他流行的时序数…

Linux系统安装QQ最新版

腾讯在2023-05-30更新了linux版的qq&#xff0c;这次界面终于不再复古&#xff0c;好看多了。 安装步骤&#xff1a; 1.进入官网&#xff0c;寻找合适的安装包下载 https://im.qq.com/linuxqq/index.shtml 选择跟自己计算机匹配的版本&#xff0c;一般都是X86&#xff0c;如…

VMware共享文件夹

当虚拟机需要使用宿主机里的文件时&#xff0c;就需要在虚拟机设置里添加共享文件夹&#xff0c;大概过程如下&#xff1a; 虚拟机设置&#xff1a; 在centos里&#xff0c;完成上述操作后会生成一个目录 /mnt/hgfs 宿主机里的文件就在这个目录里可以看到并使用了。

编译linux内核(二)

编译linux内核 1. 准备工作1.1 下载内核文件1.2 环境准备1.3 内核命名规则 2. 编译内核2.1 升级gcc2.2 make menuconfig其他报错2.3 配置选项2.4 编译内核2.5 安装模块2.6 安装内核2.7 验证内核 3. 制作内核文件3.1 创建磁盘文件3.2 磁盘分区3.3 将磁盘分区关联到/dev/loop7设备…

化学理论知识vr沉浸式教学软件推动立足“学生老师双主体”一体化的教学模式改革

VR虚拟仿真是基于虚拟现实、3D技术、计算机技术等搭建起来的一套具有数字化、智慧化的智能教学系统&#xff0c;它以学生学习为中心&#xff0c;探索学科内容&#xff0c;使用VR虚拟现实将学科内容以3D立体化形式呈现&#xff0c;培养学生的思维创新、实操技能。 VR虚拟仿真技术…

【数据库基础】Mysql基本概念讲解与实操

文章目录 数据库基础服务器&#xff0c;数据库&#xff0c;表关系Mysql的架构Sql分类 库的操作修改默认的编码格式两种校验修改数据库删除数据库备份和恢复观察用户&#xff0c;查看连接 表的操作修改表字段长度删除某一列修改表名修改列名称 数据类型小数类型floatdecimal字符…

Hystrix

一、Hystrix(豪猪)简介 1、Hystrix的设计目的 &#xff08;1&#xff09;对依赖服务调用时出现的调用延迟和调用失败进行控制和容错保护。 &#xff08;2&#xff09;阻止某一个依赖服务的故障在整个系统中蔓延&#xff0c;服务A->服务B->服务C&#xff0c;服务C故障了…

MySQL - Delete 和 Truncate 的区别

1. DELETE 命令 语法 &#xff1a; delete from 表名 [where 条件] -- 删除数据 (避免这样写, 会全部删除) DELETE FROM student;-- 删除指定数据 DELETE FROM student WHERE id 1; 2. TRUNCATE 命令 作用 : 完全清空一个数据库表, 表的结构和索引约束不会变. -- 清空 stu…

大体积mbtiles影像地图文件用什么软件浏览?

mbtiles格式简称mbt&#xff0c;是一种影像地图文件。PC端和手机端都有软件可以加载留着mbt格式的影像地图。 电脑桌面端 电脑端上的软件可以使用“图新地球”&#xff0c;直接把mbt文件拖到地图上即可&#xff0c;非常简便。 手机端 可以从华为应用商店下载“外业精灵”app…

Meta提出用向量检索来改进图像描述模型

出品人&#xff1a;Towhee 技术团队 作者&#xff1a;王翔宇 顾梦佳 随着深度神经网络的发展&#xff0c;自动图像描述技术取得了令人瞩目的进展。然而&#xff0c;现有的方法主要注重生成的描述与人类参考描述之间的相似性&#xff0c;却忽视了描述在实际应用中的特定目标。Me…

用户体验测试要怎么做?

用户体验测试是软件和应用程序开发的关键环节&#xff0c;它可以帮助团队了解如何优化产品以提高用户满意度&#xff0c;那用户体验测试要怎么做&#xff1f;下面是一些进行用户体验测试的最佳实践&#xff1a; 制定测试计划 在进行用户体验测试之前&#xff0c;您需要制定测试…

【Gradio】Could not create share link

Gradio是MIT的开源项目&#xff0c;用于构建机器学习和数据科学演示和 Web 应用&#xff0c;挺有意思的&#xff0c;感兴趣的同学可以去Gradio官网查看。 本地环境&#xff1a; - OS: Win 11 - Pyton: 3.10.11 - Gradio: 3.29.0 Gradio库的安装(Python 需要3.7 版本): - pip …