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

news2024/11/15 11:01:45

目录

处理不同情况的等待

网页中的滚动操作

使用Selenium放大和缩小

查找元素的大小

获取元素的X和Y坐标

使用自定义配置文件禁用JavaScript

设置手动代理设置

总结:


处理不同情况的等待

在Selenium自动化测试中网页可能需要花费一些时间来加载,或者希望在触发测试代码之前可以看到页面上的特定Web元素。在这种情况下,需要执行“显式等待”,这是一段代码,通过它可以定义要发生的条件,然后再继续执行代码。

Selenium具有WebDriverWait,可以将其应用于任何具有条件和持续时间的Web元素。如果不存在执行等待的元素或发生超时,则可能引发异常。

 

在下面的示例中,我们等待link_text=Sitemap加载到页面上,并在WebDriverWait方法中指定了超时。如果在超时时间内未加载该元素,则抛出异常。

from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.by import By
from pip._vendor.distlib import resources
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

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

try:
    element_present = EC.presence_of_element_located((By.LINK_TEXT, 'Sitemap'))
    WebDriverWait(driver, timeout).until(element_present)
except TimeoutException:
    print("查找用户超时!")
driver.quit()

网页中的滚动操作

在使用Selenium执行测试自动化时,您可能需要在页面上执行上滚/下滚操作的要求。您可以将execute_script()window.scrollTo(JS)代码用作参数来实现相同的效果。在下面的示例中,加载被测网站后,我们滚动到页面的末尾。

from selenium import webdriver
from time import sleep

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

''' 滚动到页尾'''
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

sleep(10)

''' 滚动到页首'''
driver.execute_script("window.scroll(0, 0);")

sleep(10)
driver.quit()

使用Selenium放大和缩小

为了在进行Selenium自动化测试时放大或缩小,应使用transformCSS属性(适用于相应的浏览器),该属性可让您在页面上执行放大,缩小,旋转,倾斜等操作。不同类型的浏览器的CSS参数如下

 

在下面的示例中,我们将浏览器中加载的网页缩小200%,然后再放大100%(即恢复正常)。由于我们使用的是Firefox浏览器,因此我们使用了MozTransform CSS属性。

from selenium import webdriver
from time import sleep

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

''' 放大 200% '''
driver.execute_script('document.body.style.MozTransform = "scale(2.0)";')
driver.execute_script('document.body.style.MozTransformOrigin = "0 0";')

sleep(10)

''' 恢复 100% '''

driver.execute_script('document.body.style.MozTransform = "scale(1.0)";')
driver.execute_script('document.body.style.MozTransformOrigin = "0 0";')

sleep(10)

driver.quit()

 

查找元素的大小

必须首先通过ID搜索元素,然后使用.size属性来计算搜索到的元素的大小。在下面的示例中,我们在页面中计算按钮create_programmatic_menu(ID = createDestoryButton)的大小。

from selenium import webdriver
from time import sleep

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

search_element = driver.find_element_by_id("createDestroyButton")

print(search_element.size)

driver.quit()

获取元素的X和Y坐标

您必须遵循用于计算元素大小的类似方法。您必须首先通过ID搜索元素,然后使用.location属性来计算搜索到的元素的X和Y坐标。计算按钮create_programmatic_menu(ID = createDestoryButton)的X和Y坐标。

from selenium import webdriver
from time import sleep

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

search_element = driver.find_element_by_id("createDestroyButton")

print(search_element.location)

''' Release all the resources '''
driver.quit()

使用自定义配置文件禁用JavaScript

如果要禁用浏览器的JavaScript支持以验证自动跨浏览器与Selenium自动化测试的兼容性,则需要更改被测浏览器的配置文件设置(在本例中为Firefox),并将更改应用于配置文件。我们使用DEFAULT_PREFERENCES ['frozen'] ['javascript.enabled'] = False禁用浏览器的JavaScript支持。

执行代码后,您应该通过在地址栏中输入about:config并搜索javascript.enabled属性的值来验证配置文件的更改。

from selenium import webdriver

ff_profile = webdriver.FirefoxProfile()

ff_profile.DEFAULT_PREFERENCES['frozen']['javascript.enabled'] = False
ff_profile.set_preference("app.update.auto", False)
ff_profile.set_preference("app.update.enabled", False)

''' 更新配置 '''
ff_profile.update_preferences()

''' 加载配置文件 '''
driver = webdriver.Firefox(ff_profile)

''' 验证是否生效 '''
driver.get("about:config")

设置手动代理设置

在某些情况下,您可能需要更改代理设置才能执行测试。要更改代理设置,需要首先导入模块selenium.webdriver.common.proxy。您必须将代理类型设置为MANUAL,然后更改代理设置,然后将新设置应用到被测浏览器(在我们的示例中为Firefox)。需要用计划用于测试的IP地址和端口号替换ip_addressport_number

from selenium import webdriver
from selenium.webdriver.common.proxy import Proxy, ProxyType

proxy_settings = Proxy()

''' 修改配置 '''
proxy_settings.proxy_type = ProxyType.MANUAL

proxy_settings.http_proxy = "ip_address:port_number"
proxy_settings.socks_proxy = "ip_address:port_number"
proxy_settings.ssl_proxy = "ip_address:port_number"

''' 添加证书 '''
capabilities = webdriver.DesiredCapabilities.FIREFOX
proxy_settings.add_to_capabilities(capabilities)

driver = webdriver.Firefox(desired_capabilities=capabilities)

 

总结:

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

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

   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/710506.html

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

相关文章

MybatisPlus从入门到精通-基础篇

文章目录 一、概述二、快速入门2.1 数据库准备2.2 创建springboot工程2.3 实体类准备2.4 测试MybatisPlus 三、MP常用配置3.1 设置表映射规则3.2 设置主键生成策略3.3 设置字段映射关系3.4 设置字段和列名的驼峰映射3.5 日志 四、基本使用4.1 增加(插入)…

TF卡/U盘扩容

1. 问题 在使用大于镜像、对TF卡/U盘烧录镜像以后,TF卡/U盘会出现一部分的空闲内存无法被使用,导致出现使用空间不足的报错,或运行大型项目不成功。 注意:本教程仅针对自行烧录镜像的用户,TF卡/U盘内如有出厂镜像则可…

【数据挖掘】时间序列教程【四】

3.3 划分变体 我们可以对上述 的主模型采用方差分析方法,并将中的总变异分解为 为残差平方和和可归因于各种频率的变化。 第二行是可能的,因为平方的所有交叉项都等于零,即对于所有 ,

基于JavaSwing的五子棋游戏设计

点击以下链接获取源码: https://download.csdn.net/download/qq_64505944/87987074?spm1001.2014.3001.5503 运行截图:

4.22. 卷积定理

1. 时域: 我们知道卷积运算是为了求系统的零状态响应的,即,如果输入给系统的信号是f(t),系统函数是h(t),那系统的输出是什么? 就是按照上述方式卷积得到 那上述的卷积在频率域是什么呢? 2. 卷积…

windows系统下的nvm环境安装

1、下载 https://github.com/coreybutler/nvm-windows/releases 直接下载zip包 并安装 2、安装 注意:尽量按照默认路径安装 否则可能出现 nvm 安装完成 后面下载使用node的时候有问题 3、安装完成检测 打开cmd命令 输入 nvm -v出现版本号 则安装成功 4、se…

FullGC调优100倍,掌握这3招,吊打JVM调优

前言: 在40岁老架构师尼恩的读者社区(50)中,很多小伙伴拿不到offer,或者拿不到好的offer。 尼恩经常给大家 优化项目,优化简历,挖掘技术亮点。 在指导简历的过程中, 线上问题排查…

【实用教程】教你一招 IDE 中比较骚的操作技巧!

我靠,这是个高手!这真是个高手! IDEA 有个很牛逼的功能,那就是后缀补全(不是自动补全),很多人竟然不知道这个操作,还在手动敲代码。 这个功能可以使用代码补全来模板式地补全语句&…

02_04_02实时调度类_线程优先级代码实战

知识回忆 基础知识 Linux内核当中有3种调度策略: . SCHED_ OTHER分时调度策略;(普通进程) SCHED_ FIFO 实时调度策略,先到先服务; SCHED RR实时调度策略,时间片轮转。 备注:如果有相同优先级的实时进程(根据优先级计算的调度权值是一样的)已经准备好,FI…

vim和vimplus安装详细步骤

1、vim安装 sudo apt update sudo apt install vim依次执行以上命令,安装好vim编辑器,安装好之后,直接使用vim hello.c进行测试,如果可以进入就没有问题。 2、vimplus安装 2.1 检查vim版本 vim --version vim --version | gre…

微信小程序入门教程

微信小程序入门教程 1、前言1. 相关介绍2. 开发工具 2、微信小程序注册3、 构建第一个微信小程序3.1 微信开发者工具3.1.1 小程序创建3.1.2 小程序项目结构目录介绍 3.2 Hbuilder 4、小程序的发布 1、前言 1. 相关介绍 要学习制作微信小程序,首先要先了解微信公众…

【数据库工具】 图文版介绍Xampp工具的使用实战

前言 有时候懒得安装数据库,就可以使用一些集成工具,比如XAMPP就是一个流行的软件包,便于搭建本地web环境,使用里面的mysql也是相当方便,今天我们就一起来看一下。 🏠个人主页:我是沐风晓月 &…

使用 Keil 环境来写 EK TM4C123G 代码

EK TM4C123G 处理器介绍 就这么一个红板子,上边有两个处理器芯片: 靠上边的芯片,用作仿真/调试器,可以先忽略; 我们重点关注的芯片,位于板子下侧中间。 从丝印上,可以看出芯片的型号为&#…

软件UI工程师的职责模板

软件UI工程师的职责模板1 职责: 1.负责产品的UI视觉设计(手机软件界面 网站界面 图标设计产品广告及 企业文化的创意设计等); 2.负责公司各种客户端软件客户端的UI界面及相关图标制作; 3.设定产品界面的整体视觉风格; 4.为开发工程师创建详细的界面说明文档&…

网联V2X跟踪式微波雷达使用说明书

1 设备简介 网联 V2X跟踪式微波雷达跟踪式微波雷达传感器, 主要应用于高速公路、城市道普通公路等场景, 通过发射 FMCW调频连续波信号调频连续波信号 ,接收路面目标物的回波信号获取目标物的距离、速度和角信息。 传感器通过 以太网或者光纤 …

Linux MQTT环境搭建详细步骤

关于MQTT的安装之前写过一次,但是不够详细,这里重新补充一下,以后用到的时候更方便。 1. 安装MQTT服务器 上网搜索apache activemq,找到它的官网https://activemq.apache.org/。 下载Linux版本。写文档时版本为ActiveMQ 5.18.1 …

改进的白鲸优化算法

改进的白鲸优化算法 一、算法灵感二、算法介绍2.1 初始化2.2 探索阶段2.3 开发阶段2.4 鲸落阶段 三、改进的白鲸优化算法3.1 集体行动策略3.2 小孔成像策略3.3 二次插值策略3.4 IBWO伪代码 一、算法灵感 白鲸优化算法(Beluga whale optimization, BWO)是2022年提出的一种元启发…

面试必备之安卓APP测试知识大全(值得收藏)

目录 一、安卓系统知识概述 1.1 安卓系统架构 1.2 安卓权限系统 1.3 认识adb与安卓间的通信 二、安卓APP测试流程图(转) 三、安卓App测试点 3.1 UI测试 3.2 兼容性测试 3.3 安装卸载/本地升级测试OTA 3.4 版本在线升级测试FOTA 3.5 交互测试 …

记录--让整个网站界面无滚动条

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 界面无滚动条 滚动条的优化也有很多种,比如随便再网上搜索美化浏览器滚动条样式,就会出现些用css去美化滚动条的方案。 那种更好呢? 没有更好只有更合适 像默认的滚…

【网络安全入门】001、基础入门-概念名词

文章目录 基础入门-概念名词1、域名(1)什么是域名(2)域名在哪里注册(3)什么是二级域名多级域名(4)域名发现对于安全测试的意义? 2、DNS(1)什么是D…