2014-12-29 45 views
1

按鈕包裹件:無法找到包含特定文本考慮以下HTML硒測試

<button type="button"><b><em><u>Next</u></em></b></button> 

在頁面的源代碼我有多個按鈕的更多。我只能選擇使用文本查找此元素下一個。我嘗試以下方法,但都沒有成功:

  1. driver.findElement(By.cssSelector("button>b>em>u[text()='Next']"))
  2. driver.findElement(By.cssSelector("button>b>em>u[.='Next']"))
  3. driver.findElement(By.cssSelector("button>b>em>u.contains('Next')"))

回答

1

這可能是按鈕有空格或其他字符的情況下,我會切換到xpath選擇。

選擇u元件

此XPath將選擇u元件:

driver.findElement(By.xpath("//button/b/em/u[contains(., 'Next')]")) 

選擇按鈕

要選擇含有上述u元件的button,例如因此,該按鈕可點擊:

driver.findElement(By.xpath("//button[b/em/u[contains(., 'Next')]]")) 

Xsl fiddle of this here

找不到元素?

順便說一句,在一般情況下,在HTML看時確定cssxpath選擇了Se,請確保您正在尋找的HTML最終呈現的版本,只是原始的HTML從供應web服務器 - 客戶端javascript可能在加載後顯着修改了html,並且還注意到如果提供的html格式不正確,那browsers也可以change html。在Chrome中,我使用Developer toolsElements窗格來查看html。

+0

StuartLC,我收到錯誤消息。他xpath表達式'//按鈕[b/em/u [包含(。,'Next')]]'不能被評估或不會在WebElement中結果 –

+0

猜測可能有多個按鈕, '在上面(可能隱藏?)。 ''driver.findElement(By.xpath(「(// button [b/em/u [contains(。,'Next')]])[1]」));'應該找到第一個。 – StuartLC

+0

@virendrachaudhary很高興你發現問題 - 關心分享?可能會幫助未來的用戶:) – StuartLC

0

嘗試分配一個ID按鈕,然後映射功能按鈕ID,而非按鈕上的文字一樣這個: <button id ="btn1" type=button">

+0

在頁面的源代碼我有相同ID的多個元素,如取消按鈕和下一步按鈕具有相同的ID。 –

0

您正在將xpath選擇器語法組合到您的CSS選擇器。試試這個代替中:

driver.findElement(By.xpath("//button/b/em/u[text()='Next']"))

driver.findElement(By.xpath("//u[text()='Next']"))

如果你希望使用一個CSS選擇器,刪除text()部分,像這樣:

driver.findElement(By.cssSelector("button>b>em>u"))

+0

不,這是錯誤的。我的錯,我很抱歉 – BackSlash

+0

@BackSlash哈哈,我想我應該先試了一下。恢復! – joostschouten

0

下面的XPath應該找到「下一步」按鈕第一次發生:

//button[text()='Next'][1] 

如果你想獲得第二次出現:

//button[text()='Next'][2] 
相關問題