【问题标题】:Perform a WebDriverWait() or similar check on a Regular Expression in Python在 Python 中对正则表达式执行 WebDriverWait() 或类似检查
【发布时间】:2015-02-27 00:30:15
【问题描述】:

我希望能够执行类似于WebDriverWait() 的操作,即:

WebDriverWait(driver, 60).until(
    expected_conditions.text_to_be_present_in_element((By.XPATH, "//tr[5]/td[11]/div"), "1.000000")
)

...对于正则表达式,它在失败前等待分配的时间。我知道我可以做一些事情,比如......

assert re.search(r"[0,1]{1}.[0-9]{6}", driver.find_element_by_xpath("//tr[5]/td[11]/div").text)

...或者我可以在上面的示例中将 search 替换为 ma​​tch。这种方法的问题是,如果对象.. (1) 尚未加载或.. (2) 仍在更改为预期的过程中,它将失败。我可以做类似...

for x in range (1,60):
    try:
        assert re.search(r"[0,1]{1}.[0-9]{6}", driver.find_element_by_xpath("//tr[5]/td[11]/div").text)
    except AssertionError:
        if x < 60:
            time.sleep(1)
        else:
            raise AssertionError

...它每秒检查 60 秒以查看 assert 语句是否已评估为真。这可能适合模块或类。我想知道是否有更优雅的解决方案,在 Python 中用于 Selenium WebDriver,来处理我不知道的问题。

【问题讨论】:

    标签: python regex selenium selenium-webdriver webdriver


    【解决方案1】:

    如果您查看what an "Expected Condition" is,您会发现自定义一个很容易

    import re
    
    from selenium.webdriver.support.expected_conditions import _find_element
    
    
    class text_match(object):
        def __init__(self, locator, regexp):
            self.locator = locator
            self.regexp = regexp
    
        def __call__(self, driver):
            element_text = _find_element(driver, self.locator).text
            return re.search(self.regexp, element_text)
    

    用法:

    WebDriverWait(driver, 60).until(
        text_match((By.XPATH, "//tr[5]/td[11]/div"), r"[0,1]{1}.[0-9]{6}")
    )
    

    【讨论】:

    • 感谢您的回复!当我有机会时,我会花一些时间来剖析它是如何工作的。我也相信这将有助于加深我对 Python 的理解。非常感谢!
    • 嘿@alecxe。我终于开始尝试这个并收到 return 语句的以下错误:AttributeError: 'tuple' object has no attribute 'text'
    • @rwbyrd yeha,我的错,已修复 - 请再次检查。谢谢。
    猜你喜欢
    • 2017-07-13
    • 2022-01-23
    • 2012-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-26
    • 2010-12-16
    相关资源
    最近更新 更多