在python,selenium中,如何设置等待的错误消息?

时间:2017-05-11 18:19:48

标签: python selenium timeoutexception

我有以下代码:

WebDriverWait(self.driver, 20).until(expected_conditions.element_to_be_clickable(click))

现在这有时会失败,我知道它失败的原因。但错误给了我

TimeoutException: Message: 

哪个没用。我可以设置此消息吗?

3 个答案:

答案 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