如何使用xpath从元素中获取文本

How to get text from element using xpath

我想写一个断言来比较预期的文本和实际的文本。为此,我需要提取文本。这是代码:

<div class="checkout-list">
  <div class="notification notification__inform " id="inform-not-product">
   <div class="message">
    <div class="text">
     "some test text"
    </div>
   </div>
  </div>
</div>

这是我的代码:

WebDriverWait(browser, 5).until(
        EC.presence_of_element_located((By.XPATH, '//div[contains(@id, "inform-not-product")]//div[contains(@class, "text")]')))
information_message = browser.find_element(By.XPATH, '//div[contains(@id, "inform-not-product")]//div[contains(@class, "text")]').text()

我收到一个错误:

回溯(最近调用最后): 文件“/Users/user/PycharmProjects/automation/tests/sales/1.py”,第 130 行,位于 information_message = browser.find_element(By.XPATH, '//div[包含(@id, "inform-not-product")]//div[包含(@class, "文字")]').文字() 类型错误:'str' 对象不可调用

我也尝试用 XPATH 做同样的事情

WebDriverWait(browser, 5).until(
        EC.presence_of_element_located((By.XPATH, '//div[contains(@id, "inform-not-product")]//div[contains(@class, "text")]/text()[1]')))
information_message = browser.find_element(By.XPATH, '//div[contains(@id, "inform-not-product")]//div[contains(@class, "text")]/text()[1]').text()

我又收到一个错误:

selenium.common.exceptions.InvalidSelectorException:消息:无效的选择器:xpath 表达式的结果“//div[contains(@id, "inform-not-product")] //div[contains(@class, "text")]/text()[1]" 是:[object Text]。应该是一个元素。

请帮忙(

text() 不存在于硒中。你只需要使用 text

使用visibility_of_element_located()代替presence_of_element_located()

您可以忽略包含,因为它不包含动态字符串。

WebDriverWait(browser, 5).until(
            EC.visibility_of_element_located((By.XPATH, '//div[@id="inform-not-product"]//div[@class="text"]')))
    information_message = browser.find_element(By.XPATH, '//div[@id="inform-not-product"]//div[@class="text"]').text