Web UI自动化测试基础——元素定位(三)

本篇文章整理了元素定位的基础知识——iframe框架中的元素定位。

一、iframe框架元素定位

  iframe是Html页面的内联框架,如果在自动化测试中无法定位到某个元素,那么很有可能是因为该元素在iframe框架中。先来看一下下面3段代码,分别是origin.html和2个iframe框架页面。

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>origin</title>
 6 </head>
 7 <body>
 8     <p id="origin_p">这是原始页面</p>
 9     <iframe src="iframe_1.html" id="parent"></iframe>
10     <br><br>
11     用户名:
12     <input type="text" id="username">
13 </body>
14 </html>
origin.html
 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>iframe_1</title>
 6 </head>
 7 <body>
 8     <p id="parent_p">这是第1层iframe框架</p>
 9     <iframe src="iframe_2.html" id="son"></iframe>
10 </body>
11 </html>
iframe_1.html
 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>iframe_2</title>
 6 </head>
 7 <body>
 8     <p id="son_p">这是第2层iframe框架</p>
 9 </body>
10 </html>
iframe_2.html

1. 未嵌套iframe

  将iframe_1.html的第9行代码注释后,打开origin.html页面,就可以看到只有一层iframe框架的origin页面。效果如下图,红框部分即为嵌套的第一层iframe框架。

图1

2. 嵌套iframe 

  将iframe_1.html的第9行代码注释取消后,打开origin.html页面,就可以看到有两层iframe框架的origin页面。效果如下图,红框部分即为嵌套的第一层iframe框架,蓝框部分为嵌套的第二层iframe框架。

图2

二、实例

 1 import time
 2 
 3 from selenium import webdriver
 4 
 5 # 创建driver实例
 6 driver = webdriver.Chrome()
 7 # 窗口最大化
 8 driver.maximize_window()
 9 # 打开待测页面
10 driver.get('file:///python/selenium/origin.html')
11 # 隐式等待10s
12 driver.implicitly_wait(10)
13 # 定位原始页面中的p标签
14 origin_p = driver.find_element_by_id('origin_p')
15 # 打印原始页面中p标签的文本
16 print('原始页面p标签的内容:{}'.format(origin_p.text))
17 # 通过索引方式进入第一层iframe框架
18 driver.switch_to.frame(0)
19 # 定位iframe_1中的p标签
20 parent_p = driver.find_element_by_id('parent_p')
21 # 打印iframe_1中p标签的文本
22 print('第1层iframe框架中p标签的内容:{}'.format(parent_p.text))
23 # 通过id属性进入第二层iframe框架
24 driver.switch_to.frame('son')
25 # 定位iframe_2中的p标签
26 son_p = driver.find_element_by_id('son_p')
27 # 打印iframe_2中p标签的文本
28 print('第2层iframe框架中p标签的内容:{}'.format(son_p.text))
29 time.sleep(2)
30 # 跳转到原始页面
31 driver.switch_to.default_content()
32 # 定位原始页面中的input标签
33 user = driver.find_element_by_id('username')
34 # 在input标签中输入admin
35 user.send_keys('admin')
36 # 等待2s
37 time.sleep(2)
38 # 退出驱动程序并关闭浏览器
39 driver.quit()

第10行地址部分根据自己实际地址填写。以上代码中主要体现了进入iframe框架的方法switch_to.frame()和对应的2种方式,即索引方式和id方式;也展示了跳出iframe框架的方法switch_to.default_content()。

运行结果如下:

图3

 

参考资料:《Python自动化测试实战》——无涯

猜你喜欢

转载自www.cnblogs.com/cnblogs0/p/11234560.html