【问题标题】:Locate an element text by XPath通过 XPath 定位元素文本
【发布时间】:2013-10-14 17:11:56
【问题描述】:

我在 Ruby 中使用 Webdriver,我想通过它的 xpath 定位一个元素,下面是一个示例 html:

<li id="ID1">
    <label for="accountNumber"> &nbsp;</label>
    123456
    <span id="accountNumber"></span>
</li>

如何通过 xpath 或 ID 获得 123456?

我在下面尝试过,但它不起作用:

element = driver.find_element :xpath => "//li[@id='ID1']/"
puts element.text

谢谢。

【问题讨论】:

  • puts element.text 打印什么?
  • 你试过了吗 //li[contains(@id, 'ID') and contains(text(),"yourtexthere")]

标签: webdriver selenium-webdriver


【解决方案1】:

我建议您使用cssselector 而不是xpath,因为有很多优点。但是,在某些情况下您只能使用xpath,例如选择父元素、按文本选择等。在您的情况下,您当然可以使用cssselector

您的 html 的 Css 将是 li#ID1&gt;label[for='accountNumber'] 或只是 label[for='accountNumber']

如果你坚持使用xpath,应该是.//li[@id='ID1']/label[@for='accountNumber'] 或通过文字 .//li[@id='ID1']/label[text()='123456']

【讨论】:

  • 感谢您的回答,我按照您的建议尝试了 css 和 xpath,但仍然找不到。也许是因为 123456 实际上没有被标签标签包围?@nilesh
  • 那些选择器是正确的。您是否有多个与选择器匹配的元素?这些元素是否可见?这是在 iframe 里面吗?您的网站是否可以公开进行测试?
【解决方案2】:

试试这个:

"//li[包含(.,'123456')]" 要么 "//li[@id='ID1']"

在这两种情况下,我都能够从嵌套在元素内的文本中获取文本“123456”。

用 C# 测试过的代码:

    [TestMethod]
    public void FindByText()
    {
        IWebElement li = driver.FindElement(By.XPath("//li[contains(.,'123456')]")); //Returns correct element
        li = driver.FindElement(By.XPath("//li[@id='ID1']")); //Also returns correct element

        string text = li.Text; //Result: "  123456"
    }

【讨论】:

    【解决方案3】:

    请尝试以下,它对我有用:

    element = driver.find_element(:xpath, "//li[@id='ID1']")
    puts element.text
    

    【讨论】:

      猜你喜欢
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-08
      • 2019-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多