通过XPath定位元素文本

时间:2013-10-07 23:28:37

标签: webdriver selenium-webdriver

我在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

感谢。

3 个答案:

答案 0 :(得分:0)

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

html的Css为li#ID1>label[for='accountNumber']或仅label[for='accountNumber']

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

答案 1 :(得分:0)

试试这个:

“//的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"
    }

答案 2 :(得分:0)

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

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