你正在学 Web 自动化测试?Selenium 根基操纵你领会嘛?| 原力计划

[复制链接]

赞助会员

主题
0
回帖
0
精华
0
积分
2
爱豆
0 个
性别
保密
注册时间
2014-9-28
最后登录
2014-9-28
发表于 2022-4-25 02:18 | 显示全部楼层 |阅读模式
你正在学 Web 自动化测试?Selenium 根基操纵你领会嘛?| 原力计划-1.jpg

作者 | 遇上方知友__QAQ

责编 | 王晓曼

出品 | CSDN博客

在自动化测试中,我们都晓得是经过定位元素来实现的,那末偶然辰我们定位元素定位不到是为什么呢?

1、页面出现了 iframe;

2、出现了新的窗口,没有实现句柄的切换;

3、三种期待方式,没有挑选其中之一来利用,元素没有被加载出来。

你正在学 Web 自动化测试?Selenium 根基操纵你领会嘛?| 原力计划-2.jpg

iframe

iframe 既是一个内联框架被用来在当前 HTML 文档中嵌入另一个文档。

浅显点就是网页中的嵌套网页,假如我们在做自动化测试中,需要定位的元素包括在了 iframe 内联框架里,那末我们就需要跳进 iframe ,假如说还需要做后续的操纵,但后续的元素不在 iframe 中,这时辰就需要再跳出 iframe 。

我们现在都晓得了什么是 iframe ,那末接下来我们拿126邮箱登录做下示例。

我们看看网页中的 iframe 长什么样:

你正在学 Web 自动化测试?Selenium 根基操纵你领会嘛?| 原力计划-3.jpg

可以清楚的看到,当我把鼠标放到这里时,iframe 元素的将全部登录覆盖到了,那末这时辰,就需要用到 Iframe 的跳入。

iframe 的跳入,我这里简单归纳了三种,其中两种以126登录为例,一种为一号店登录方式为QQ中的账号密码登录。方式一:
from selenium import webdriver
#实例化驱动
driver =webdriver.Chrome
#隐式期待:
driver.implicitly_wait(20)
# 翻开网页:
driver.get('https://www.126.com/')
#跳进iframe,按照获得标签名来经过下标跳进

iframes=driver.find_elements_by_tag_name('iframe')
driver.switch_to.frame(iframes[0])

inputs = driver.find_elements_by_tag_name('input')
for i in inputs:
if i.get_attribute('placeholder') =='邮箱帐号或手机号码':
i.send_keys('123456')
elif i.get_attribute('placeholder') =='输入密码':
i.send_keys('456789')
break
driver.find_element_by_id('dologin').click
方式二:
from selenium import webdriver
#实例化驱动
driver =webdriver.Chrome
#隐式期待:
driver.implicitly_wait(20)
# 翻开网页:
driver.get('https://www.126.com/')
#跳进iframe,方式二,逐层定位,跳进iframe,先定为父级唯一元素,再定位包括子元素来跳进

divs = driver.find_element_by_id('loginDiv')
driver.switch_to.frame(divs.find_element_by_tag_name('iframe'))

inputs = driver.find_elements_by_tag_name('input')
for i in inputs:
if i.get_attribute('placeholder') =='邮箱帐号或手机号码':
i.send_keys('123456')
elif i.get_attribute('placeholder') =='输入密码':
i.send_keys('456789')
break
driver.find_element_by_id('dologin').click
方式三

由于126登录中,我尝试了用 get_attribute 方式来跳进,可是经过获得 frameborder="0" 这个元素名与值在 iframe 中跳进是不支持的,而且它的其他元素,比如 ID 是自增范例,那末我们在现实操纵中,假如存在很多iframe,但有些元素是唯一的,那末还是可以更便利一点,这里举例一号店登录方式中的QQ登录,以账户密码登录方式。
from selenium import webdriver
#实例化驱动
driver = webdriver.Chrome
#隐式期待
driver.implicitly_wait(20)
#翻开126登录页面:
driver.get('https://passport.yhd.com/passport/login_input.do')
#点击QQ登录
driver.find_element_by_class_name('iconfont').click
#句柄切换:
driver.switch_to.window(driver.window_handles[-1])
#跳进iframe方式三:先获得一切的iframe的标签名
iframes = driver.find_elements_by_tag_name('iframe')
for i in iframes:
#循环查找合适条件的那一组iframe
if i.get_attribute('width') =='370':
#跳进我想要跳进的iframe
driver.switch_to.frame(i)
#点击账号密码登录
driver.find_element_by_id('switcher_plogin').click
跳出 iframe
#跳出iframe: 回到默许的高低文
driver.switch_to.default_content
总结:

实在,只要定位到了 iframe 元素,不管那种方式,都可以跳进大概你有更好的法子都可以,我相信大师城市有比我更灵敏的方式!

你正在学 Web 自动化测试?Selenium 根基操纵你领会嘛?| 原力计划-4.jpg

什么是句柄?

浅显点讲,句柄就是阅读器中的窗口。我们都晓得,一个阅读器可以翻开很多个页面,那末在没有封闭的情况下,它会一个个展现在阅读器的上方,我们可以经过点击它来切换回历史翻开的窗口。那末在自动化测试中,是叫做句柄,也就是说,在翻开很多个窗口的时辰,我们的测试工具它是不晓得具体你要操纵的是哪一个窗口?所以这里,就触及到了句柄切换。

这里也是拿一号店来举例,我们在进入一号店登录页面后,点击QQ的方式来登录,就会弹出新的窗口,这时辰就需要切换到我们具体想要操纵的窗口:

你正在学 Web 自动化测试?Selenium 根基操纵你领会嘛?| 原力计划-5.jpg

那末,我想要切进QQ账号平安登录应当怎样做呢?

代码演示:
from selenium import webdriver
#实例化驱动
driver = webdriver.Chrome
#隐式期待
driver.implicitly_wait(20)
#翻开126登录页面:
driver.get('https://passport.yhd.com/passport/login_input.do')
#点击QQ登录
driver.find_element_by_class_name('iconfont').click
#句柄切换: 这里先是收集一切的窗口,以列表的形式展现
wins = driver.window_handles
#这里打印下它(具体操纵不需要打印,这里是为了更直观的让您领会它)
print(wins)
#以后具体切换我们想要的哪一个,比如你想要将操纵实时连结在最前,那-1便可以咯
driver.switch_to.window(wins[-1])
句柄打印成果:

你正在学 Web 自动化测试?Selenium 根基操纵你领会嘛?| 原力计划-6.jpg

假如还想要切换回去,那末你就按照下标来切换就好啦。

你正在学 Web 自动化测试?Selenium 根基操纵你领会嘛?| 原力计划-7.jpg

你正在学 Web 自动化测试?Selenium 根基操纵你领会嘛?| 原力计划-8.jpg

Select下拉框

在自动化测试中,我们有三种方式可以停止下拉挑选:

这里举例携程网中国内酒店的三个下拉框:

你正在学 Web 自动化测试?Selenium 根基操纵你领会嘛?| 原力计划-9.jpg

鄙人拉框中有三种定位方式:

方式一

代码展现:
from selenium import webdriver
#实例化驱动
driver = webdriver.Chrome
#隐式期待
driver.implicitly_wait(20)
#翻开携程页面:
driver.get('https://www.ctrip.com/')
from selenium.webdriver.support.ui import Select #导入Select下拉框
#方式一: 按照index下标来挑选房间数:

#先定位到房间数
fj = driver.find_element_by_id('J_roomCountList')

#实例化select
select1 = Select(fj)

#按照下标来挑选房间数为2的 由于第一个下标为0,房间数为1,所以第二个下标为1,房间数为2
select1.select_by_index(1)
方式二,按照Value元素值来切换

元素信息展现:

你正在学 Web 自动化测试?Selenium 根基操纵你领会嘛?| 原力计划-10.jpg

代码实现
from selenium import webdriver
#实例化驱动
driver = webdriver.Chrome
#隐式期待
driver.implicitly_wait(20)
#翻开携程页面:
driver.get('https://www.ctrip.com/')
from selenium.webdriver.support.ui import Select #导入Select下拉框
#方式二: 按照value值来挑选房间数:

#先定位到房间数
fj = driver.find_element_by_id('J_roomCountList')

#实例化select
select1 = Select(fj)

#按照元素value的值来停止房间数的切换,这里切换为value值2的,也是
#房间数为2
select1.select_by_value('2')
方式三

利用 visible_text 文本信息输入的方式来停止下拉框挑选:

你正在学 Web 自动化测试?Selenium 根基操纵你领会嘛?| 原力计划-11.jpg

代码实现
from selenium import webdriver
#实例化驱动
driver = webdriver.Chrome
#隐式期待
driver.implicitly_wait(20)
#翻开携程页面:
driver.get('https://www.ctrip.com/')
from selenium.webdriver.support.ui import Select #导入Select下拉框
#方式三: 按照文本内容来挑选房间数:

#先定位到房间数
fj = driver.find_element_by_id('J_roomCountList')

#实例化select
select1 = Select(fj)

#复制页面中的文本信息便可以,利用visible_text方式
select1.select_by_visible_text('3间')
你正在学 Web 自动化测试?Selenium 根基操纵你领会嘛?| 原力计划-12.jpg

Alert弹窗处置

对页面停止操纵后,出现的弹窗提醒停止处置。

这里我拿首页百度中的----设备—搜索设备–保存设备—对弹窗处置,这一个流程做示例;

首先要悬浮到这个元素:

你正在学 Web 自动化测试?Selenium 根基操纵你领会嘛?| 原力计划-13.jpg

点击搜索设备,以后点击保存设备,对弹窗停止处置。

你正在学 Web 自动化测试?Selenium 根基操纵你领会嘛?| 原力计划-14.jpg

在Alter中,有两种处置方式,一个为肯定,一个为取消。

对弹出框停止肯定操纵,代码演示:
from selenium import webdriver
#实例化驱动
driver = webdriver.Chrome
#隐式期待
driver.implicitly_wait(20)
#翻开携程页面:
driver.get('http://www.baidu.com')
from selenium.webdriver.common.action_chains import ActionChains #导入鼠标悬浮模块
#将鼠标悬浮在设备上
set = driver.find_element_by_id('s-usersetting-top')
ActionChains(driver).move_to_element(set).perform
#点击搜索设备
driver.find_element_by_class_name('setpref').click
#点击保存设备
driver.find_element_by_class_name('prefpanelgo').click
#对弹窗停止肯定操纵
alert = driver.switch_to.alert
alert.accept
对弹出框做取消操纵

代码演示:
#对弹窗停止取消操纵
alert = driver.switch_to.alert
alert.dismiss
以上就是Selenium的几种常见操纵整理。

版权声明:本文为CSDN博主「遇上方知友__QAQ」的原创文章,遵守CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/weixin_46457203/article/details/106164117

你正在学 Web 自动化测试?Selenium 根基操纵你领会嘛?| 原力计划-15.jpg

☞我只是追个直播,成果被拉进大咖们的群面临面群聊……

☞微信公众号封闭iOS端虚拟付出营业;苹果「Apple 登录」存平安缝隙;谷歌推延公布Android 11 Beta| 极客头条

☞可怕!CPU 竟成了黑客的爪牙!

☞若何用NLP帮助投资分析?三大外洋机构落地案例详解

☞这 10 个云计较毛病,会让你的营业萎靡不振!

☞好扑科技连系区块链行业成长趋向,重磅推出“好扑区块链合股人”计划

小编TIPS:记得点击下方的二维码下载APP,并关注我们的微信公众号哟

扫描下载APP

快拿出手机扫一扫吧!

扫描关注公众号

快拿出手机扫一扫吧!

使用高级回帖 (可批量传图、插入视频等)快速回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则   Ctrl + Enter 快速发布  

发帖时请遵守我国法律,网站会将有关你发帖内容、时间以及发帖IP地址等记录保留,只要接到合法请求,即会将信息提供给有关政府机构。
快速回复 返回顶部 返回列表