Selenium没有这样的元素:无法定位元素

时间:2017-06-28 16:00:37

标签: html selenium xpath

我可以在HTML页面中通过XPath找到该元素,但是在selenium中,它显示无法找到该元素。

以下是我的Xpath:

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

另外,我无法分享我的HTML页面。

2 个答案:

答案 0 :(得分:0)

您提供的关于您的问题的信息非常少,因此我会就一般问题给出一般答案:

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

  1. 可能的问题1 让我们假设定位器正确 - 因此可能出现驱动程序在元素出现之前检查元素的情况
  2.   

    解决方案:

         

    一个。在调试模式下确保元素在驱动程序的步骤中可见   搜索它 - 项目没有折叠,没有重叠,可见,   存在。

         

    湾确保在驱动程序实际搜索时加载了该元素   为了它。添加明确的等待。

    1. 第2期 //div[@class='navbar-collapse collapse'] - 这样的定位器始终是问题的根源,因为你的div应该具有完全等于navbar-collapse collapse的类,顺序相同。如果将添加另一个类,定位器将失败,或者类将以另一种方式订购。
    2.   

      解决方案 - 最好使用'包含'定位器代替'等于' //div[contains(@class,'navbar-collapse')]

      1. 第3期 - 此定位器不会告诉您关于您要搜索的元素的信息。它只是说元素应该位于可折叠div中。与定位器的li部分相同的问题。
      2.   

        <强>解决方案:

             

        一个。尝试使用更多信息丰富的定位器(类/ ids),就像它一样   真的更容易维护(了解定位器正在寻找什么和   更新正确的一个)当不抽象&#34;崩溃&#34;,但&#34; userItem&#34;(   例如)使用的类。

             

        湾降低复杂性 - 删除不需要的定位器部分。你真的   需要定位器//div[@class='navbar-collapse collapse']的那部分?   如果删除此部件,定位器是否会在逻辑上/正确地工作?一世   相信如此)。对于合同经理来说这很重要吗?放在span而不是div内?如果否 - 使用*进行标记指示。等等。

答案 1 :(得分:0)

是明确等待只是部分工作。但在使用Explicit之后,它会显示另一个名为“无法使用Selenium点击元素”的错误。然后我不得不使用下面详述的“JavascriptExecutor”来实现这一点。

WebElement Importbuilding = wait.until(ExpectedConditions.elementToBeClickable((By.xpath(“// div [@ class ='col-md-1 add_building margin_left25 col-xs-3 ng-scope'] // button”) )));

JavascriptExecutor executor =(JavascriptExecutor)驱动程序; executor.executeScript(“arguments [0] .click();”,Importbuilding);