2013-10-07 28 views
0
我在Ruby中使用的webdriver

找到一個元素的文本,我想通過它的XPath來定位的元素,下面是一個例子HTML:與XPath

<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 

感謝。

+0

什麼'把element.text'打印? – Arran

+0

您是否嘗試過// li [包含(@id,'ID')並且包含(text(),「yourtexthere」)] – CosminO

回答

0

我建議您使用cssselector而不是xpath,因爲它有很多優點。不過,也有某些情況下,您只能使用xpath如選擇父元素,通過短信等選擇你的情況,你當然可以用cssselector

的CSS擺脫你的HTML將li#ID1>label[for='accountNumber']或者只是label[for='accountNumber']

如果你堅持的XPath,它應該是.//li[@id='ID1']/label[@for='accountNumber'] 或文本 .//li[@id='ID1']/label[text()='123456']

+0

感謝您的回答,我按照您的建議嘗試了css和xpath,找到它。也許是因爲123456實際上並沒有標籤標籤?@nilesh – nzsquall

+0

這些選擇器是正確的。你有多個匹配選擇器的元素嗎?這些元素是否可見?這是在一個iframe中嗎?您的網站是否可以公開測試? – nilesh

0

試試這個:

「//li[contains(.,'123456 ')]「 or 」// 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" 
    } 
0

請嘗試以下,它的工作對我來說:

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