【问题标题】:How to verify an element contains ANY text?如何验证元素是否包含任何文本?
【发布时间】:2017-11-20 19:33:26
【问题描述】:

我经常需要等待 AJAX 调用在页面完成加载后将文本添加到页面上的元素。我了解如何使用 WebDriverWait 来等待元素中出现特定文本,但我不知道如何等到出现任何文本。我试图避免一个持续检查元素文本不是== ''的while循环。

这是我用来查找特定文本的方法:

try:
    WebDriverWait(self.driver, 10).until(EC.text_to_be_present_in_element((By.ID, 'myElem'), 'foo'))
except TimeoutException:
    raise Exception('Unable to find text in this element after waiting 10 seconds')

有没有办法检查任何文本或非空字符串?

【问题讨论】:

    标签: python selenium selenium-webdriver


    【解决方案1】:

    您可以使用 By.XPATH 并检查 xpath 表达式中的 text() 是否为非空:

    EC.presence_of_element_located((By.XPATH, '//*[@id="myElem" and text() != ""]'))
    

    仅供参考,我在这里使用presence_of_element_located()

    检查元素是否存在于 DOM 上的期望 页。这并不一定意味着该元素是可见的。

    完整代码:

    try:
        WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="myElem" and text() != ""]')))
    except TimeoutException:
        raise Exception('Unable to find text in this element after waiting 10 seconds')
    

    【讨论】:

    • 感谢您的回复!我似乎无法为您的示例找到正确的语法。 By.xpath 必须是 By.XPATH 我相信,但我仍然收到 TypeError。另外,如果我不在乎文本包含什么,“foo”的意义是什么?
    • @Jesse 是的,xpath 是一个错字 - 请参阅带有完整代码的更新答案。检查它是否适合您。谢谢。
    • 好的,刚刚看到您更新的答案。似乎它应该可以工作,但对我来说仍然超时。显示元素有文本的示例,然后 WebDriverWait 超时 - http://bpaste.net/show/7kl2xNhrrPNTr443YH1M/
    • @Jesse 我明白了,myElem 不是标签名称 - 它是 id 属性值。更正您的 xpath://*[@id="myElem" and text() != ""].
    • 天啊,我应该抓住它的!有用!有趣的是它如何返回一个WebElement 对象,而我原来的text_to_be_present_in_element() 示例返回True
    猜你喜欢
    • 2020-04-16
    • 2016-03-15
    • 1970-01-01
    • 2021-07-31
    • 2016-03-31
    • 1970-01-01
    • 1970-01-01
    • 2021-01-03
    • 1970-01-01
    相关资源
    最近更新 更多