问答 脚本多次运行后总是会重复报一个错,但页面元素并未调整

小绵羊 · 2025年02月17日 · 最后由 小绵羊 回复于 2025年02月18日 · 4483 次阅读

报错信息如下

INFO:pages.base_page:Clicked on add button
ERROR:pages.base_page:TimeoutException occurred: Message:
Stacktrace:
GetHandleVerifier 0x00007FF722DD6F15+28773 0x00007FF722D42600 0x00007FF722BD8FAA 0x00007FF722C2F286 0x00007FF722C2F4BC 0x00007FF722C82A27 0x00007FF722C5728F 0x00007FF722C7F6F3 0x00007FF722C57023 0x00007FF722C1FF5E [0x00007FF722C211E3]
GetHandleVerifier [0x00007FF72312425D+3490733]
GetHandleVerifier [0x00007FF72313BA43+3586963]
GetHandleVerifier [0x00007FF72313147D+3544525]
GetHandleVerifier 0x00007FF722E9C9DA+838442 0x00007FF722D4D04F 0x00007FF722D49614 0x00007FF722D497B6 [0x00007FF722D38CE9]
BaseThreadInitThunk [0x00007FF950C67374+20]
RtlUserThreadStart [0x00007FF952B9CC91+33]

tests\test_view.py:309 (test_search_set)
login =

@pytest.mark.usefixtures("login")
def test_search_set(login):
"""测试快捷搜索"""
# 调用封装函数进入 app 设置页面
app_page=enter_app_set(login, test_data['create_app']['appname'])
if app_page is None:
pytest.fail("Failed to enter the app settings page.")
view_page = ViewPage(login)
view_page.locate_view()
view_page.locate_child_second()
view_page.locate_search_btn()

view_page.locate_set_search(test_data['view']['text'])

tests\test_view.py:321:


pages\view_page.py:230: in locate_set_search
search_filed_show = self.wait_for_element(*self.search_filed)
pages\base_page.py:54: in wait_for_element
return WebDriverWait(self.w, timeout).until(


self =
method = ._predicate at 0x000001DDF35EF6D0>
message = ''

def until(self, method: Callable[[D], Union[Literal[False], T]], message: str = "") -> T:
"""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

代码

page
def locate_set_search(self,text):
try:
self.wait_for_element_and_click(*self.add_search_btn)
logger.info("Clicked on add button")
self.search_field_select = text
search_filed_show = self.wait_for_element(*self.search_filed)
search_filed_show.click()
search_condition_select_show = self.wait_for_element(*self.search_condition_select)
search_condition_select_show.click()
search_condition_show = self.wait_for_element(*self.search_condition)
search_condition_show.click()
except TimeoutException as e:
logger.error(f"TimeoutException occurred: {e}")
raise
except NoSuchElementException as e:
logger.error(f"NoSuchElementException occurred: {e}")
raise
except Exception as e:
logger.error(f"Unexpected error occurred during setting custom condition: {e}")
raise
# self.add_search_btn.click()
# self.search_field_select=text
# self.search_filed.click()
# self.search_condition_select.click()
# self.search_condition.click()
test
@pytest.mark.usefixtures("login")
def test_search_set(login):
"""测试快捷搜索"""
# 调用封装函数进入 app 设置页面
app_page=enter_app_set(login, test_data['create_app']['appname'])
if app_page is None:
pytest.fail("Failed to enter the app settings page.")
view_page = ViewPage(login)
view_page.locate_view()
view_page.locate_child_second()
view_page.locate_search_btn()
view_page.locate_set_search(test_data['view']['text'])
view_page.locate_save_btn()
basepage
def wait_for_element(self, by, value, timeout=20):
"""等待元素出现"""
return WebDriverWait(self.w, timeout).until(
EC.presence_of_element_located((by, value))
)
def wait_for_element_and_click(self,by, value, timeout=10):
try:
# 等待元素可点击
element = WebDriverWait(self.w, timeout).until(
EC.element_to_be_clickable((by, value))
)
# 确保没有其他元素遮挡
WebDriverWait(self, timeout).until(
lambda d: not self.is_element_obstructed(element)
)
# 执行点击操作
element.click()
except TimeoutException:
raise Exception(f"Element {value} was not clickable within {timeout} seconds.")

尝试解决方案

1.排查 chromedriver 和 chrome 版本
2.添加各种显式等待方法
3.排查是否正确释放内存

最终问题还是没有解决,希望大家可以提供解决方法,感谢!!

共收到 3 条回复 时间 点赞

WebDriverWait(self.driver, timeout=timeout).until(
expected_conditions.visibility_of_element_located((By.XPATH, loc)))

换种写法看是否兼容

直接问 chatgpt 吧

NotReal 回复

感谢!我试一下的。

需要 登录 後方可回應,如果你還沒有帳號按這裡 注册