我试图单击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);
他们都不为我工作。
其他奇怪的事情是上述步骤没有错误且按钮未按预期单击
答案 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"));