我有以下代码:
WebDriverWait(self.driver, 20).until(expected_conditions.element_to_be_clickable(click))
现在这有时会失败,我知道它失败的原因。但错误给了我
TimeoutException: Message:
哪个没用。我可以设置此消息吗?
答案 0 :(得分:2)
你不必尝试/除外或包装任何东西; message
只是until()
方法的一个参数。
WebDriverWait(self.driver, 20).until(
expected_conditions.element_to_be_clickable(click),
message='My custom message.',
)
这会产生:
selenium.common.exceptions.TimeoutException: Message: My custom message.
答案 1 :(得分:0)
除了块之外的简单尝试应该可以完成这项工作吗?
try:
WebDriverWait(self.driver, 20).until(expected_conditions.element_to_be_clickable(click))
except TimeoutException:
print("Something")
#or do anything else like self.browser.close()
print (traceback.format_exc())
如果你想编辑另一件事的消息本身,你必须在Python中为这种情况创建一个自定义错误消息,或者创建一个自定义异常。 希望这是你正在寻找的东西。
答案 2 :(得分:0)
我写了一个愚蠢的包装类。这将始终输出“等待时超时”而不是空白文本。如果需要更具体的文本,则必须创建一个包装类或一个应用函数“get_error”的新等待类。我在底部包含了我的jquery动画等待示例。
'''
Wrapper for WebDriverWait
'''
from selenium.webdriver.support.ui import WebDriverWait
from selenium.common.exceptions import TimeoutException
class Wait(WebDriverWait):
def __init__(self, driver, timeout):
self.driver = driver
self.timeout = timeout
self.wait = WebDriverWait(driver, timeout)
def until(self, condition):
try:
self.wait.until(condition)
except TimeoutException as exception:
error_func = getattr(condition, "get_error", None)
if callable(error_func):
raise TimeoutException(error_func())
else:
raise TimeoutException("Timed out on wait")
def until_not(self, condition):
try:
self.wait.until_not(condition)
except TimeoutException as exception:
error_func = getattr(condition, "get_error", None)
if callable(error_func):
raise TimeoutException(error_func())
else:
raise TimeoutException("Timed out on wait")
WaitForAnimation类:
'''
Wait for a jquery animation to finish
'''
from selenium.webdriver.support import expected_conditions
class WaitForAnimation(object):
def __init__(self, locator):
self.locator = locator
def __call__(self, driver):
return not driver.execute_script("return jQuery('"+self.locator+"').is(':animated')")
def get_error(self):
return "Timed out waiting for animation of " + self.locator