在Selenium Java中无法始终单击按钮

时间:2019-10-10 10:02:11

标签: java selenium

我试图单击Selenium Java代码中的一个按钮,但并非一直都单击。显然,这是很常见的问题。

我尝试了以下几种解决方案:

HTML代码:

<button class="btn btn--action btn--border-white btn--my__calculate" style="display: inline-block;">Final Figure</button>

解决方案1:

WebElement btnWorkout = webDriver.findElement(By.cssSelector(".btn--my__calculate"));

        if (btnWorkout.isDisplayed() && btnWorkout.isEnabled()) {
            btnWorkout.click();
        }

解决方案2:

WebDriverWait wait = new WebDriverWait(webDriver, 10);
        WebElement btnWorkout = wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector(".btn--my__calculate")));
        btnWorkout.click();

解决方案3:

WebElement btnWorkout = webDriver.findElement(By.cssSelector(".btn--my__calculate"));
JavascriptExecutor executor = (JavascriptExecutor) webDriver;
        executor.executeScript("arguments[0].click();", btnWorkout);

他们都不为我工作。

其他奇怪的事情是上述步骤没有错误且按钮未按预期单击

3 个答案:

答案 0 :(得分:1)

得出WebDriverWait,然后跟随Xapth。 尝试以下选项。

选项1:

WebDriverWait wait = new WebDriverWait(webDriver, 20);      
WebElement btnWorkout=wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//button[@class='btn btn--action btn--border-white btn--my__calculate'][text()='Final Figure']")));
btnWorkout.click();

选项2 :使用Action

WebDriverWait wait = new WebDriverWait(webDriver, 20);      
WebElement btnWorkout=wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//button[@class='btn btn--action btn--border-white btn--my__calculate'][text()='Final Figure']")));
Actions action=new Actions(webDriver);
action.moveToElement(btnWorkout).click().build().perform();

选项3:使用JavaScript Executor

WebDriverWait wait = new WebDriverWait(webDriver, 20);      
WebElement btnWorkout=wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//button[@class='btn btn--action btn--border-white btn--my__calculate'][text()='Final Figure']")));
JavascriptExecutor executor = (JavascriptExecutor) webDriver;
executor.executeScript("arguments[0].click();", btnWorkout);

答案 1 :(得分:0)

很好奇@State选项对您不起作用。继续使用选项2中的WebDriverWait,但请尝试使用操作链,而不要使用executeScript()方法。我不确定如何用Java编写代码,但是会是这样:

click()

答案 2 :(得分:0)

也许您还有另一个具有相同CSS(类)的隐藏元素。您可以尝试通过 linkText partialLinkText 捕获元素,如下所示:

WebElement btnWorkout = webDriver.findElement(By.linkText("Final Figure"));