我试图使用Java Selenium Webdriver在弹出窗口中单击“保存”按钮,但是它会引发异常
消息:元素当前不可见,因此可能无法与命令持续时间进行交互
我能够在弹出窗口中看到“保存”按钮处于活动状态。我无法弄清楚它抛出异常的原因。
我想点击的“保存”按钮的HTML代码,
</div>
<br>
<br>
<br>
<hr>
<button class="btn btn-primary" style="margin-left: 10px" ng-click="saveData()" data-dismiss="modal" type="button">Save</button>
<button id="buttonmodalcancel" class="btn btn-default" ng-click="cancel()" type="button">Cancel</button>
</div>
firepath:html / body / div [6] / div / div / div [2] / div / div / button [1]。
我没有使用XPath作为html / body / div之后的内容,不断变化。
我使用的Java代码:
driver().manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver().findElementByXPath("//*[contains(text(), 'Save')]").click();
答案 0 :(得分:0)
首先,您的代码看起来不对。 试试这个:
driver.manage().timeouts().implicitlyWait(10, "DefaultTimeOutInSec")), TimeUnit.SECONDS);
driver.findElement(By.xpath("//*[contains(text(), 'Save')]")).click();
应该使用 driver
变量(调用)而不使用大括号;
其次,您可以使用替代css选择器,因为它们的工作速度更快:
String buttonCss="button.btn.btn-primary";
driver.findElement(By.cssSelector(buttonCss)).click();
希望这对你有用
答案 1 :(得分:0)
我想出了一种暂时解决问题的方法。我遇到的问题是xpath并不总是相同,它在指定的模式中不断变化。我为元素获得的xpath示例
html/body/div[6]/div/div/div/div/div/div/button[1]
html/body/div[5]/div/div/div/div/div/div/button[1]
html/body/div[2]/div/div/div/div/div/div/button[1]
因为,div中的数字是我的xpath中唯一的变量,我使用了下面的xpath,
driver().findElement(By.xpath("html/body/div[*]/div/div/div/div/div/div/button[1]")).click();
答案 2 :(得分:0)
当您收到此错误时,我建议您检查xpath或css选择器是否与一个且仅一个元素相关。
我有时会使用一种方法来点击第一个显示的元素。基本上,它看起来像(你可能需要纠正它):
public void clickOnFirstDisplayedElement(String path){
// Retrieve all the elements of the page that make sense with the xpath
int i = driver.findElements(By.xpath(path)).size();
for(int x = 0; x < i; x++){
int y = x + 1;
boolean isDisplayed = driver.findElement(By.xpath(path)).isDisplayed();
if(isDisplayed){
driver.findElement(By.xpath("(" + path + ")[" + y + "]"));
x = i;
}
}
}
希望它有所帮助。