【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"]')

  

 

posted @ 2021-02-25 16:28  第五个季节xjw  阅读(180)  评论(0)    收藏  举报