2014-10-27 37 views
0

以下代碼表示「方法text()對於類型Test未定義」,並提示我創建一個新函數text()in類測試By.xpath(contains(text(),「Some text」)給出錯誤

driver.findElement(By.xpath(contains(text(), "menu"))); 

我使用Eclipse開普勒和硒2.39.0

我收到的例外是:。org.openqa.selenium.NoSuchElementException 我無法弄清楚我要去哪裏錯了

+0

'文本()'大概是在一個靜態方法Hamcrest匹配器的風格,如果你打算在不指定類的情況下使用它,則需要'import static'。 – chrylis 2014-10-27 08:56:49

+0

我是新手。我在哪裏放置導入靜態子句。 – 2014-10-27 08:59:56

+0

與進口。提供'text()'的庫的文檔應該有說明。 – chrylis 2014-10-27 09:01:55

回答

2

XPath表達式需要用引號括起來 - 因爲你試圖解析的表達式也包含一個字符串字面量,所以我建議你將字面量切換到單個撇號'。此外,除非您期望根元素包含文本menu,否則您需要更具體地瞭解要搜索的元素。例如,下面的XPath:

driver.findElement(By.xpath("//*[contains(text(), 'menu')]")); 

會發現文本「菜單中的」 li元素(注意XPath是區分大小寫):

<html> 
    <foo> 
     <bar> 
      <ul> 
       <li id="123">menu</li> 
      </ul> 
     </bar> 
    </foo> 
</html> 

如果可能的話,會更加肯定,例如如果你知道這是一個li元素:

driver.findElement(By.xpath("//li[contains(text(), 'menu')]")); 

編輯(OP把實際 HTML高達)

這將找到DIV元素:

driver.findElement(By.xpath("//DIV[@style[contains(., 'm‌​enubar_menubutton.png')]]")); 

注意xpath是區分大小寫的 - 所以你需要複製SHOUTCASE標籤。

+0

我得到這個錯誤 org.openqa.selenium.NoSuchElementException:無法找到元素與xpath ==// * [包含(文本(),'menubutton')](警告:服務器沒有提供任何堆棧跟蹤信息)通過使用這兩種方法。 – 2014-10-28 03:13:31

+0

@ayushibakshi您嘗試匹配的數據在'DIV'元素的樣式**屬性**中,即根本沒有'text()。更新 – StuartLC 2014-10-28 03:55:51

+0

那麼我如何達到這個div元素?它沒有獨特的屬性來區分它。 – 2014-10-28 04:34:33

1

我覺得有一個更簡單的方法來做到這一點。

我個人只是做:

WebElement we = driver.findElement(By.Id("123")) 

,或者如果你想利用CSS選擇器,你可以這樣做:

WebElement we = driver.findElement(By.cssSelector("li:nth-child(1)")) //baring you know the index of the list 
+0

您是在編寫自己的問題,還是僅僅評論@StuartLC的答案? – SiKing 2014-10-27 22:32:05

+0

手機應用程序沒有顯示整個帖子!哎呀。我可以刪除該回復 – bcar 2014-10-27 22:34:48

+0

該代碼不會說明元素的ID。這裏是元素 - >'

' – 2014-10-28 03:23:42

相關問題