2015-09-28 46 views
2

我試圖找到並單擊我的頁面上的一個元素,但無法使用by.id方法,因爲生成了id並且每個會話都發生更改。對於大多數元素,我可以通過使用xpath來解決這個問題,但是有一個下拉菜單,在這裏不起作用。我可以點擊包含下拉列表的元素,並向我顯示選項。如果我找到我需要的元素並複製它的xpath,測試用例將不會起作用,說明它找不到xpath。現在旁邊的id我試圖點擊的元素也有一個類。問題是這個類不是唯一的,下拉菜單中的所有菜單項都有不同的文本。我想要做的是一樣的東西:findElement by class where content equals text

driver.findeElement(By.class("x-menu-item-text").equals("Unique text 1here").click() 

類「X-菜單項文本」是不是唯一的,但在這個特殊類的文字。我無法使用該ID,因爲這是自動生成的。我想單擊的項目或元素的完整代碼是:

<a id="ext-comp-1035" class="x-menu-item" hidefocus="true" unselectable="on" href="#"><span id="ext-gen250" class="x-menu-item-text">Unique text 1 here</span></a> 
<a id="ext-comp-1035" class="x-menu-item" hidefocus="true" unselectable="on" href="#"><span id="ext-gen250" class="x-menu-item-text">Unique text 2 here</span></a> 

我在Eclipse(Java)中使用Selenium Webdriver。

Allthough提供的答案似乎在大多數網頁和地點工作,還有一種情況,但是,我不能得到它的工作。任何人都可以建議嗎? 有一個包含按鈕的頁面,我想單擊其中一個按鈕。如果我用下面的語句:

driver.findElement(By.xpath("//*[@class=' x-btn-text' and text()='Add']")).click(); 

我得到一個錯誤信息

org.openqa.selenium.ElementNotVisibleException: Element is not currently visible and so may not be interacted with 

如果我看我看到源:

<button class=" x-btn-text" id="ext-gen539" type="button">Add</button> 

所以元素存在,且可見。 我試着加入點擊語句前wait.until聲明,但這並不工作之一:

wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@class=' x-btn-text' and text()='Toevoegen']"))); 
driver.findElement(By.xpath("//*[@class=' x-btn-text' and text()='Toevoegen']")).click(); 

的額外信息:可能這個問題是因爲我在尋找的是坐落在一個元素彈出窗口?

回答

1

您可以使用XPath定位 https://newcircle.com/bookshelf/selenium_tutorial/locators

By.xpath( 「//跨度[@類= 'X-菜單項文本' 和文本()= '獨特的文本1此處']」)

+0

謝謝,這個作品! – Hugo

+0

我已經更新了我的問題,因爲我有麻煩做同樣的另一種元素,不能弄清楚爲什麼它不工作在那裏找到的對象的 – Hugo

+0

查身份證,它是正確的對象? (貌似你發現了另一個,重複的元素) findElement(By.xpath())的getAttribute(「ID」) – Vovka