Selenium Python2022(二)

2023-11-14

 

您可能需要在多种情况下针对不同的浏览器(例如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()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Selenium Python2022(二) 的相关文章

  • Selenium WebDriver C# 通过 href 路径查找元素

    我怎样才能点击 a href title Please click to apply Apply a 我的页面上有一些 申请 链接 我应该单击 应用 16 而不是 应用 10 11 n 我有一个脚本 watir ruby browser l
  • 集成 Windows 身份验证可以在 Firefox 中使用吗?

    如果我的 ASP NET 应用程序是使用 Windows 集成身份验证为 ADFS 设置的 我知道这可以在 IE 中工作 但是它可以在 Firefox 中工作吗 我在网络上看到一些内容表明存在问题 您需要在每个客户端浏览器中设置解决方法 h
  • Watir 脚本偶尔返回 Net::ReadTimeout 错误

    我有一个 Watir 脚本 偶尔会意外地返回此错误 Net ReadTimeout 我搜索了这个错误并发现这个问题 https stackoverflow com questions 47452276 watir get sometimes
  • 将 Selenium 与 PyCharm CE 结合使用

    我正在尝试将 Selenium 与 PyCharm CE 一起使用 我已经使用 pip install Selenium 安装了 Selenium 并且可以通过终端使用它 但是当我尝试将它与 PyCharm 一起使用时 出现导入错误 Imp
  • 如何将 chromedriver 与 selenium webdriver 代理一起使用?

    我们的网络环境使用代理服务器连接到外部互联网 在IE gt Internet选项 gt 连接 gt LAN设置中配置 例如 10 212 20 11 8080 现在 我在 chrome 和 IE 上使用 selenium webdriver
  • Firefox 中的文件下载对话框

    我正在使用firefox进行selenium python编程 自动开始下载并保存文件 我已经完成了所有操作 但无法下载csv文件 我的python版本是2 6 6 我的selenium版本是最新版本 我也尝试使用以下链接 即 fp web
  • 使用 Cucumber Scenario Outline 处理 Excel 电子表格

    如果可能的话 我试图找到一种更优雅的方法来处理从与 Excel 电子表格行 第 n 个 相关的 Cucumber Scenario Outline 中调用第 n 个数字 目前 我正在使用迭代编号来定义要从中提取数据的 Excel 电子表格的
  • Selenium Webdriver - Firefox 中元素不可点击错误

    通常在 Chrome 驱动程序中出现的元素不可点击错误也恰好在 Firefox 中出现 显示的错误消息 Exception in thread main org openqa selenium WebDriverException Elem
  • selenium 2.0 中的 isElementPresent

    大家好 我正在使用 webdriver 所以如果我想使用 selenium s rc 函数 isElementPresent 我必须模拟 selenium rc 所以我会执行以下操作 import org openqa selenium B
  • 如何指示 Applescript 打开带有链接的新 Firefox 窗口?

    我的代码看起来像这样 tell application Firefox open location http rubyquicktips tumblr com end tell 但如果我打开 Firefox 该链接将在新选项卡中打开 但我希
  • Selenium Webdriver - 单击多个下拉菜单时出现陈旧元素异常,而 HTML DOM 不会更改

    我尝试自动化一个场景 其中条件是我必须从下拉列表中选择一个选项 然后它旁边有另一个下拉列表 我必须单击下一个下拉列表中的一个选项才能启用按钮 我尝试使用代码 但它仅单击第一个选项 并显示错误为过时的元素引用 元素未附加到页面文档 请帮忙 如
  • Firefox 上的 Angular JS 输入日期

    我有这些输入和这个模型
  • Selenium 单击在 Internet Explorer 11 上不起作用

    我尝试在 Internet Explorer 上单击 selenium 但它不起作用 我努力了element click moveToElement element click build perform javascript没事了 事实上
  • :target 伪类在 Firefox 中无法正常工作

    我正在使用 target 伪类制作一个具有 CSS 灯箱类型效果的页面 当您单击图像时 会弹出一个包含信息的框 当您单击任意位置时 该框会再次消失 它在 Chrome 和 IE 中运行良好 但在 Firefox 中存在一个奇怪的错误当您将鼠
  • 在浏览器中查看 javascript 事件

    我正在使用火狐浏览器 有没有什么东西可以向我显示实时触发的所有 JavaScript 事件 您可以右键单击其中的元素Firebug http getfirebug com的 HTML 选项卡并单击日志事件 然后 您将在 控制台 选项卡中看到
  • 如何使用 phantomjs 等待 iframe 在 selenium python 中加载

    获取页面的脚本是 from selenium import webdriver from selenium webdriver support ui import WebDriverWait from selenium webdriver
  • 为什么函数声明在不同浏览器中的处理方式不同?

    虽然我在谷歌中找不到对此的引用 但我熟悉这样一个事实 在 javascript 中 全局函数声明在执行任何代码之前都会被解释 换句话说 这工作得很好 f function f 但是 我注意到 chrome 和 firefox 对全局函数声明
  • Selenium 与 HtmlUnit? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我试图更好地理解测试框架并一直在研究 Selenium 我用过HTMLUnit http htmlun
  • 无法摆脱脚本中的硬编码延迟

    我用 vba 结合 selenium 编写了一个脚本来解析网页中可用的所有公司名称 该网页启用了延迟加载方法 因此每个滚动中只有 20 个链接可见 如果我滚动 2 次 则可见链接数为 40 个 依此类推 该网页中有 1000 个可用链接 我
  • Selenium 中的“断言”与“验证”

    Selenium 执行的检查通常有两种形式 assertFoo 和 verifyFoo 据我所知 assertFoo 使整个测试用例失败 而 verifyFoo 只是记录该检查的失败并让测试用例继续进行 因此 使用 verifyFoo 即使

随机推荐

  • OpenWrt 未来智能家居系统、物联网的底层核心

    前言 很多参加 跟着佐大学OpenWrt开发 培训班的学员对OpenWrt未来的发展方向很迷茫 所以写此文谈一下我对OpenWrt未来趋势的看法 随着OpenWrt的流行 OpenWrt已经在不知不自觉中从单纯的路由器系统转变成了智能家居
  • javascript排序

  • teamSpeak Server搭建Linux

    1 需要用到的 Xshell以及Xftp 操作云服务器以及上传teamSpeak Linux文件 还需要一台云服务器 2 开放服务器防火墙端口 1 如果Xshell连接不上就是22端口没开放 3 下载teamSpeak Linux文件 1
  • 平行云受邀参与撰写信通院XRMA联盟《3D数字内容生产技术白皮书》

    本周 由中国信息通信研究院发起编制的 3D数字内容生产技术白皮书 首次全体研讨会在线上举行 来自信通院 平行云 北航虚拟现实国家重点实验室 中国联通研究院 中国电信研究院 Cocos等多家单位的专家参与本次研讨 会上 信通院专家介绍项目研究
  • 华为OD机试 Python 最佳植树距离

    描述 小明得到了一项任务 在一个沙地里种树 不过 有些地方不能种树 只能选特定的位置来种 为了让树之间的空间尽可能大 从而更好地防沙 你要帮小明决定每棵树应该种在哪里 举个例子 如果合适的种树地点是1 3 5 6 7 10 13 你有3棵树
  • tortoisegit:TortoiseGitPlink Fatal Error - No supported authentication methods available

    TortoiseGit gt Settings gt Network gt 将SSH client设置成C Program Files Git usr bin ssh exe
  • ajax如何传对象去后台,ajax如何传一个实体对象到后台呢

    实体声明 function target code content isnt temgix temgix1 temgix2 temgix3 gruw this code code this content content this isnt
  • js 正则表达式

    js 正则表达式 http tool oschina net regex https developer mozilla org zh CN docs Web JavaScript Guide Regular Expressions 11
  • 深入理解计算机系统-程序链接

    链接 就是将不同部分的代码和数据手机和组合成为一个单一文件的过程 这个文件可被加载到存储器并执行 链接过程可以在如下时间执行 编译时 在源代码翻译成机器代码时 加载时 程序被加载器加载到存储器并执行时 运行时 由应用程序去完成这个工作 OS
  • 笛卡尔积的解释和作用

    一 笛卡尔积的解释 例 给出二个域 假设集合A a b 集合B 0 1 2 则两个集合的笛卡尔积为 a 0 a 1 a 2 b 0 b 1 b 2 类似的例子有 如果A表示某学校学生的集合 B表示该学校所有课程的集合 则A与B的笛卡尔积表示
  • c语言浮点数出错_20192020第二学期C语言练习题03

    一 单选题 共100题 50分 1 若有定义int a 10 p a 则表达式p 5表示 A 元素a 5 的地址 B 元素a 6 的地址 C 元素a 5 的值 D 元素a 6 的值 正确答案 A 2 题号 8281若有定义 int aa 8
  • FFmpeg将编码后数据保存成mp4

    以下测试代码实现的功能是 持续从内存块中获取原始数据 然后依次进行解码 编码 最后保存成mp4视频文件 可保存成单个视频文件 也可指定每个视频文件的总帧数 保存多个视频文件 为了便于查看和修改 这里将可独立的程序段存放在单个函数中 1 线程
  • Android判断有无外置SD卡(TF卡),并读写文件

    转载来源 https blog csdn net qq 27061049 article details 94178875 1 相关方法说明 2 Android Manifest xml 添加权限
  • 自制USB-HUB一分四扩展器

    自制USB HUB一分四扩展器 电脑只有俩USB2 0接口 不够用 所以决定自己做一个 使用到的芯片是sl2 1a 考虑到是自己用 所以成本还是比较重要的 这款芯片价格便宜 而且做扩展器也是够用的 适用于USB2 0 下面是原理图 其实这个
  • 您的计算机已被.balckhoues-V-XXXXXXX勒索病毒感染?恢复您的数据的方法在这里!

    引言 网络威胁不断进化 勒索病毒成为了当今数字世界中的一大威胁 在这些恶意软件中 balckhoues V XXXXXXX 勒索病毒以其高级的加密技术和威胁手段引起了广泛关注 本文91数据恢复将深入介绍 balckhoues V XXXXX
  • RAS非对称加密,前端js加密,node后端解密,jsencrypt

    纯HTML引入jsencrypt js文件 node后端解密也是独立文件jsencryptnode js 前端加密 下面是公钥
  • 实战经验分享:如何通过HTTP代理解决频繁封IP问题

    在网络爬虫和数据采集等应用中 频繁遇到目标网站封锁或限制IP的情况是非常常见的 为了解决这个问题 使用HTTP代理是一种有效的方法 本文将与您分享一些实战经验 帮助您通过HTTP代理解决频繁封IP问题 确保您的数据采集工作顺利进行 一 了解
  • 查看Oracle数据库的用户名和密码

    运行 cmd 按如下输入命令 sqlplus as sysdba sysdba为超级用户 alter user 用户名 account unlock 解除锁定 必须带 号 注意用英文字符 alter user 用户名 identified
  • 网页版百度网盘倍速方法

    打开控制台在console中输入以下代码 videojs getPlayers video player html5player tech setPlaybackRate 2 然后回车即可 后面数字即为速度可以自由定义 附 打开控制台办法
  • Selenium Python2022(二)

    您可能需要在多种情况下针对不同的浏览器 例如Firefox Chrome Internet Explorer Edge 测试代码 跨不同浏览器测试网站的做法称为自动浏览器测试 要使用Selenium自动化测试执行自动浏览器测试 您应该在单元