【pytest框架之web自动化测试】---selenium针对frame的处理
web自动化中,一个元素定位不到,除了考虑窗口切换问题,还需判断元素是否再frame中
这种情况下需要先切换到对应frame下,使用
driver.switch_to_frame方法
然后再进行元素定位,注意再定位其他元素时需要再切回父节点
举个例子:
https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable中想要定位框中元素,参考代码2,执行后报元素未找到
Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id="draggable"]"}

test_login.py
# -*- coding:utf-8 -*-
# author:xjw
# date=2021/2/25
from selenium import webdriver
class login:
def setup(self):
self.driver= webdriver.Chrome()
self.driver.get('https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable') #鼠标移动
self.driver.maximize_window()
self.driver.implicitly_wait(5) #隐式等待
def tearDown(self):
self.driver.quit()
代码2:
from Testdev.pytest.setup_teardown.test_login import login
class Testframe(login):
def test_frame(self):
self.driver.find_element_by_xpath('//*[@id="draggable"]')
执行结果:

解决方案:
# -*- coding:utf-8 -*-
# author:xjw
# date=2021/2/25
from Testdev.pytest.setup_teardown.test_login import login
class Testframe(login):
def test_frame(self):
self.driver.switch_to_frame('iframeResult')
self.driver.find_element_by_xpath('//*[@id="draggable"]').text
#再定位其他元素时,需要先切回父节点
self.driver.switch_to.parent_frame()
self.driver.find_element_by_xpath('//*[@id="submitBTN"]')
浙公网安备 33010602011771号