如何等待非空内容元素的出现?

2024-04-25 16:31:59 发布

您现在位置:Python中文网/ 问答频道 /正文

如何等待内容(文本)非空的元素出现?我尝试使用//*[@id="test" and text() != ""]通过xpath选择,但是WebDriverWait#until的返回没有检索到元素。在

我的代码:

selector = '//*[@id="test" and text() != ""]'
element = WebDriverWait(driver, timeout).until(
  expected_conditions.presence_of_element_located((By.XPATH, selector))
)

我想得到元素的文本内容。我试过了:

^{pr2}$

如果我只打印element,输出是<selenium.webdriver.remote.webelement.WebElement(session="xxx", element="xxx")>。怎么了?在

我要找的那个div有这样的结构:

<div>
   Test:
   <div id="test"><b>this text here</b></div>
</div>

Tags: and代码texttest文本divid元素
2条回答

在这种情况下,text()xpath函数没有帮助,因为它不考虑子元素的文本。实际上,您需要在预期的条件下调用.textYou can create a custom one

from selenium.webdriver.support import expected_conditions as EC

class wait_for_non_empty_text(object):
    def __init__(self, locator):
        self.locator = locator

    def __call__(self, driver):
        try:
            element_text = EC._find_element(driver, self.locator).text.strip()
            return element_text != ""
        except StaleElementReferenceException:
            return False

用法:

^{pr2}$

您可以通过xpath等一个非空文本的元素,如下所示:

xpath = "//*[@id='test']"

WebDriverWait(driver, 30).until(lambda driver: driver.find_element_by_xpath(xpath).text.strip() != '')

source

相关问题 更多 >