自动化测试中怎么获取frame页面上的元素
2022-04-30 本文已影响0人
吱吱菌啦啦
- frame:frame是html中的框架,即在一个浏览器中显示多个页面,frame分为水平框架和垂直框架。
- frame标签包含 frame iframe frameset
测试网页: https://www.w3school.com.cn/tiy/t.asp?f=html_frame_cols
垂直frame
<html>
<frameset cols="25%,50%,25%">
<frame src="/example/html/frame_a.html">
<frame src="/example/html/frame_b.html">
<frame src="/example/html/frame_c.html">
</frameset>
</html>
水平frame
<html>
<frameset rows="25%,50%,25%">
<frame src="/example/html/frame_a.html">
<frame src="/example/html/frame_b.html">
<frame src="/example/html/frame_c.html">
</frameset>
</html>
frame存在两种:嵌套,非嵌套
切换frame的方法:
根据元素id或index切换frame:driver.switch_to.frame()
切换到默认frame:driver.switch_to.default_content()
切换到父级frame:driver.switch_to.parent_frame()
切到frame页:
1.处理未嵌套的frame:
driver.switch_to_frame("frame的id")
driver.switch_to_frame("frame-index")frame无ID时依据索引来处理,索引从0开始driver.switch_to_frame(0)
2.处理嵌套frame:
对于嵌套的先进入到iframe的父节点,再进到子节点,然后可以对子节点里面的对象进行处理和操作
driver.switch_to.frame("父节点")
driver.switch_to.frame("子节点")
从frame切回页面
switch_to.parent_frame()
switch_to.default_content()
测试页面:https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable
以获取frame页面元素为例:
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
class TestFrame:
class TestWindows():
def setup(self):
self.driver = webdriver.Chrome()
# 隐式等待
self.driver.implicitly_wait(5)
# 窗口最大化
self.driver.maximize_window()
self.driver.get('https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable')
def teardown(self):
self.driver.quit()
def test_frame(self):
# 切换到frame,两种方式都可行
self.driver.switch_to.frame('iframeResult')
# self.driver.switch_to_frame('iframeResult')
# 获取frame上的元素
print(self.driver.find_element(By.XPATH, '//*[@id="draggable"]').text)
# 从frame切回页面,两种方式
#self.driver.switch_to.parent_frame()
self.driver.switch_to.default_content()
sleep(2)
# 获取页面上的元素,获取页面上点击运行按钮
self.driver.find_element(By.XPATH, '//*[@id="submitBTN"]').click()