遇到的问题:代码中是将切换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是同级关系不能直接切换,要先返回主页面后再进行切换
解决后的代码
大功告成,问题解决了