web自动化测试-第五讲: 三大切换
Posted 瓜牛强强
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了web自动化测试-第五讲: 三大切换相关的知识,希望对你有一定的参考价值。
三大切换:窗口切换、iframe切换、alert切换
为什么要讲这三个切换呢?第四讲我们讲过,“Message: no such element: Unable to locate element”遇到这样的报错,很可能是页面加载过慢导致的,但是,导致这个报错的还可能是其他原因,比如:在跑web自动化测试时,还会有其他原因:
第一种:遇到新开了一个窗口需要定位新窗口中的元素,定位失败
第二种:web页面中嵌套ifram e中元素,定位失败
第三种:alert弹框切换(原始的弹框,比较少用了),弹框出现后,如果不点击‘确定’按钮,页面的元素加载不出来,定位失败
一、窗口切换:driver.switch_to.window(driver.driver.window_handles[-1])
from selenium import webdriver
# 打开浏览器
driver = webdriver.Chrome()
# 浏览器最大化
driver.maximize_window()
# 打开一个网页
driver.get("http://www.baidu.com")
# 通过xpath找到需要操作的元素(天气按钮):元素定位
weather_button = driver.find_element('xpath', '//span[@class="show-icon-temp c-font-normal c-color-t"]')
# 点击天气按钮
weather_button.click()
# 获取当前所有窗口的窗口句柄,相当于窗口的id(每个窗口id是唯一的,并且每次打开会生成一个新的id)
print(driver.window_handles) # 得到的是一个列表
# 切换窗口,最新打开的窗口的句柄会在列表的最后一个元素
driver.switch_to.window(driver.driver.window_handles[-1])
# 定位新打开窗口的元素
weather_button = driver.find_element('xpath', '//*[contains(text(),"广东")]')
# 关闭整个浏览器,并且关闭驱动chromedriver
driver.quit()
二、iframe切换
1、自己先写一个html,嵌套iframe一个百度页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1 id="title">test</h1>
<p>这个是一个测试页面</p>
<iframe name="test_iframe" src="http://www.baidu.com" width="800px" height="600px"></iframe>
</body>
</html>
2、定位iframe中的元素:
切换iframe的方法:
(1)driver.switch_to.frame('name属性')
(2)a、先找到iframe这个元素:iframe = driver.find_element('xpath','//iframe')
b、再切换:driver.switch_to.frame(iframe)
(3)通过索引切换:driver.switch_to.frame(0)
定位完iframe中元素,需要切换回主页面:driver.switch_to.content()
多层iframe,切换到上一级iframe:driver.switch_to.parent_frame()
"""
文件名:class_04_01.py
姓 名:瓜牛强强
日 期:2021/7/31
时 间:0:14
"""
from selenium import webdriver
# 打开浏览器
driver = webdriver.Chrome()
# 浏览器最大化
driver.maximize_window()
# 打开自己写的网页
driver.get("file:///E:/test/test.html")
# 在主页面中:通过id定位‘title’,可以定位到
driver.find_element('id', 'title')
# 在iframe页面中:嵌入了一个百度页面,定位百度页面中元素,需要先切换iframe
iframe = driver.find_element('xpath','//iframe')
driver.switch_to.frame(iframe)
# 在iframe页面中:定位元素
driver.find_element('id','kw')
# 关闭整个浏览器,并且关闭驱动chromedriver
driver.quit()
三、alert弹框切换:
1、alert = driver.switch.alert
2、alert.accept()
1、自己先写一个html,带有alert的弹窗
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1 id="title">test</h1>
<p>这个是一个测试页面</p>
<iframe name="test_iframe" src="http://www.baidu.com" width="800px" height="600px"></iframe>
<script>
alert("hello selenuim")
</script>>
</body>
</html>
2、切换alert,并点击“确定”按钮
"""
文件名:class_04_01.py
姓 名:瓜牛强强
日 期:2021/7/31
时 间:0:14
"""
from selenium import webdriver
# 打开浏览器
driver = webdriver.Chrome()
# 浏览器最大化
driver.maximize_window()
# 打开自己写的网页
driver.get("file:///E:/test/test.html")
# 切换alert
alert = driver.switch.alert
# 点击“确定”按钮
alert.accept()
# 关闭整个浏览器,并且关闭驱动chromedriver
driver.quit()
面试题:在做web自动化测试中定位元素找不到的错误,有哪些原因?
学到这,你至少知道四种原因了吧
To be continue,点个关注,持续更新。。。
以上是关于web自动化测试-第五讲: 三大切换的主要内容,如果未能解决你的问题,请参考以下文章
融云微课堂第五讲 | 基于原生代码开发 Flutter 插件