2017-06-28 176 views
-1

我可以通過HTML頁面中的XPath找到元素,但在硒中,它顯示無法找到元素。Selenium no such element:無法定位元素

下面是我的Xpath:

driver.findElement(By.xpath("//div[@class='navbar-collapse collapse']//li[@ng-class='{active:contactActive}']//span[contains(text(),'Contact Manager')]")).click(); 

而且,我不能分享我的HTML頁面。

+0

您需要明確地等待元素出現 – sircapsalot

回答

0

是顯式等待只是部分工作。但在使用Explicit之後,請等待顯示另一個名爲「無法使用Selenium單擊元素」的錯誤。然後,我不得不使用下面詳細描述的「JavascriptExecutor」來實現這個功能。我們可以通過下面的例子來說明如何使用WebElement的方法來創建一個Web服務: ))));

JavascriptExecutor executor =(JavascriptExecutor)driver; executor.executeScript(「arguments [0] .click();」,Importbuilding);

0

您提供關於你的問題還真沒有幾個信息,所以我給一般的答案一般問題:

前提 - 你必須定位 //div[@class='navbar-collapse collapse']//li[@ng-class='{active:contactActive}']//span[contains(text(),'Contact Manager')]

  1. 可能發行1讓我們假設定位器正確 - 所以有可能的情況是,驅動程序在出現之前檢查元素

解決方案:

a。在驅動程序爲 正在搜索時確保在調試模式下該元素在步驟中可見 - 項目未摺疊,未重疊,可見,存在 。

b。當驅動程序實際上在爲其搜索 時,請確保該元素已加載。添加明確的等待。

  • 問題2 //div[@class='navbar-collapse collapse'] - 例如定位器總是的問題源,因爲你的div應具有類正好等於navbar-collapse collapse,以相同的順序。如果添加了另一個類,定位器將失敗,否則類將以另一種方式定購。
  • 解決方案 - 這是更好地使用 '包含' 定位器,而不是 '等於' //div[contains(@class,'navbar-collapse')]

  • 第3 - 此定位告訴你沒有太多關於你正在尋找的元素。它只是說元素應該位於可摺疊div內。與您的定位器的li部分相同的問題。
  • 解決方案:

    一個。嘗試使用更多信息豐富的定位器(類/ ids),因爲它將更容易維護(瞭解定位器正在查找的內容以及更新爲正確的一個),而不是抽象「摺疊」,但是「userItem」(例如 ) )使用的類。

    b。降低複雜性 - 刪除不需要的部分定位器。你真的需要 那部分定位器//div[@class='navbar-collapse collapse']? 如果你移除了這部分,定位器是否會邏輯/正確地工作?我相信如此)。「合同經理」對span而不是div是否重要?如果不是,則使用*作爲標記指示。等等。

    相關問題