无法单击按钮 - Java Selenium Webdriver

时间:2014-07-22 20:22:51

标签: selenium xpath selenium-webdriver

我试图使用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();

3 个答案:

答案 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;
        }
    }
}

希望它有所帮助。