我可以在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页面。
答案 0 :(得分:0)
您提供的关于您的问题的信息非常少,因此我会就一般问题给出一般答案:
前提条件 - 你有定位器
//div[@class='navbar-collapse collapse']//li[@ng-class='{active:contactActive}']//span[contains(text(),'Contact Manager')]
解决方案:
一个。在调试模式下确保元素在驱动程序的步骤中可见 搜索它 - 项目没有折叠,没有重叠,可见, 存在。
湾确保在驱动程序实际搜索时加载了该元素 为了它。添加明确的等待。
//div[@class='navbar-collapse collapse']
- 这样的定位器始终是问题的根源,因为你的div应该具有完全等于navbar-collapse collapse
的类,顺序相同。如果将添加另一个类,定位器将失败,或者类将以另一种方式订购。 解决方案 - 最好使用'包含'定位器代替'等于'
//div[contains(@class,'navbar-collapse')]
<强>解决方案:强>
一个。尝试使用更多信息丰富的定位器(类/ 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);