poium框架进行UI自动化时,遇到打开界面后切换了一下iframe,然后点击按钮后打开界面又要切换iframe时遇到的问题和解决方法

遇到的问题:代码中是将切换iframe的脚本直接放在了点击按钮的脚本之后,然后运行结果显示找不到该iframe的位置
前期的处理脚本
在这里插入图片描述
报错信息:

test_dir\test_UI\test_tenant_department_management.py:47 (TestTenantDepartmentManagementPage.test_add_user)
self = <test_dir.test_UI.test_tenant_department_management.TestTenantDepartmentManagementPage object at 0x00000232EBA443A0>

    def test_add_user(self):
        random_number=random.randint(1,100)
        department_page.frame.switch_to_frame()
        # department_page.department_select.click()
        department_page.add_btn.click()
        # department_page.frame.switch_to_frame()
        # frame=driver.find_element(By.ID,'mvcFrame1')
>       frame = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID,'mvcFrame1')))

test_tenant_department_management.py:55: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <selenium.webdriver.support.wait.WebDriverWait (session="b502b1b734eaa4765e0088366358253b")>
method = <function presence_of_element_located.<locals>._predicate at 0x00000232EBA66940>
message = ''

    def until(self, method, message: str = ""):
        """Calls the method provided with the driver as an argument until the \
        return value does not evaluate to ``False``.
    
        :param method: callable(WebDriver)
        :param message: optional message for :exc:`TimeoutException`
        :returns: the result of the last call to `method`
        :raises: :exc:`selenium.common.exceptions.TimeoutException` if timeout occurs
        """
        screen = None
        stacktrace = None
    
        end_time = time.monotonic() + self._timeout
        while True:
            try:
                value = method(self._driver)
                if value:
                    return value
            except self._ignored_exceptions as exc:
                screen = getattr(exc, 'screen', None)
                stacktrace = getattr(exc, 'stacktrace', None)
            time.sleep(self._poll)
            if time.monotonic() > end_time:
                break
>       raise TimeoutException(message, screen, stacktrace)
E       selenium.common.exceptions.TimeoutException: Message: 
E       Stacktrace:
E       	GetHandleVerifier [0x00007FF741CE2142+3514994]
E       	(No symbol) [0x00007FF741900CE2]
E       	(No symbol) [0x00007FF7417A76AA]
E       	(No symbol) [0x00007FF7417F1860]
E       	(No symbol) [0x00007FF7417F197C]
E       	(No symbol) [0x00007FF741834EE7]
E       	(No symbol) [0x00007FF74181602F]
E       	(No symbol) [0x00007FF7418328F6]
E       	(No symbol) [0x00007FF741815D93]
E       	(No symbol) [0x00007FF7417E4BDC]
E       	(No symbol) [0x00007FF7417E5C64]
E       	GetHandleVerifier [0x00007FF741D0E16B+3695259]
E       	GetHandleVerifier [0x00007FF741D66737+4057191]
E       	GetHandleVerifier [0x00007FF741D5E4E3+4023827]
E       	GetHandleVerifier [0x00007FF741A304F9+689705]
E       	(No symbol) [0x00007FF74190C048]
E       	(No symbol) [0x00007FF741908044]
E       	(No symbol) [0x00007FF7419081C9]
E       	(No symbol) [0x00007FF7418F88C4]
E       	BaseThreadInitThunk [0x00007FFD7C867344+20]
E       	RtlUserThreadStart [0x00007FFD7D4E26B1+33]

错误信息来看,问题似乎在于在等待某个元素出现时超时了。具体来说,代码试图等待ID为’mvcFrame1’的元素出现,但在10秒的等待时间结束后,该元素仍未出现。

这个问题可能是由以下几个原因导致的:

页面加载延迟:页面可能需要更长的时间才能完全加载,导致’mvcFrame1’元素在10秒的等待时间内无法出现。
元素定位错误:可能存在定位’mvcFrame1’元素的方式不正确的问题,导致无法找到该元素。
尝试了好久,终于找到了解决方法:
原因:第一次切换iframe和第二次要切换的iframe是同级关系不能直接切换,要先返回主页面后再进行切换
解决后的代码
在这里插入图片描述
在这里插入图片描述
大功告成,问题解决了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值