我如何点击 "Continue" 按钮来完成 Selenium Java 中的调查
How I can click on a "Continue" button to finish a survey in Selenium Java
我尝试自动化调查页面。一切正常,直到我到达最后一个按钮,但我无法点击。
我尝试了什么:
@FindBy(xpath = "//div[contains(@class,'question-12')]//a[@id='next']")
WebElement continua10;
@FindBy(xpath = "//div[contains(@class,'question-14')]//a[@id='next']")
WebElement continua;
@FindBy(css = "#prev")
WebElement back;
@FindBy(css = "#page-title")
WebElement result_title;
public void completeSurvey() {
JavascriptExecutor executor = (JavascriptExecutor) driver;
executor.executeScript("arguments[0].click();", ages);
executor.executeScript("arguments[0].click();", sex);
executor.executeScript("arguments[0].click();", start);
executor.executeScript("arguments[0].click();", question1);
executor.executeScript("arguments[0].click();", question2);
executor.executeScript("arguments[0].click();", question3);
executor.executeScript("arguments[0].click();", question4);
executor.executeScript("arguments[0].click();", question5);
executor.executeScript("arguments[0].click();", question6);
executor.executeScript("arguments[0].click();", question7);
executor.executeScript("arguments[0].click();", question8);
executor.executeScript("arguments[0].click();", question9);
//executor.executeScript("arguments[0].click();", question10);
// JavascriptExecutor js = (JavascriptExecutor) driver;
// js.executeScript("window.scrollBy(0,200)", "");
executor.executeScript("arguments[0].click();", question10a);
executor.executeScript("arguments[0].click();", question10b);
executor.executeScript("arguments[0].click();", question10c);
executor.executeScript("arguments[0].click();", question10d);
executor.executeScript("arguments[0].click();", question10e);
executor.executeScript("arguments[0].click();", question10f);
executor.executeScript("arguments[0].click();", question11);
continua.click();
disclaimer.click();
WebDriverWait wait = new WebDriverWait(driver, 30);
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath(xpath = "//div[contains(@class,'question-14')]//a[@id='next']")));
continua.click();
代码遍历此调查问卷的每个步骤。我需要单击最后一个“继续”按钮。
对于那个特定的下一个按钮,您可能需要定义一个单独的 xpath:
(xpath = "//div[contains(@class,'actions')]//a[@class='btn']")
试试这个,如果有效请告诉我。
我看到您的定位器是正确的,但是您应该等待继续按钮的可见性而不是存在,因为它甚至在您选择免责声明按钮之前就已经存在。但是,在选择免责声明之前,继续按钮存在但被禁用。所以我想当您尝试在它仍处于禁用状态时单击它时,将继续按钮更改为启用需要一些时间。
所以,请从
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath(xpath = "//div[contains(@class,'question-14')]//a[@id='next']")));
至
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(xpath = "//div[contains(@class,'question-14')]//a[@id='next']")));
我尝试自动化调查页面。一切正常,直到我到达最后一个按钮,但我无法点击。
我尝试了什么:
@FindBy(xpath = "//div[contains(@class,'question-12')]//a[@id='next']")
WebElement continua10;
@FindBy(xpath = "//div[contains(@class,'question-14')]//a[@id='next']")
WebElement continua;
@FindBy(css = "#prev")
WebElement back;
@FindBy(css = "#page-title")
WebElement result_title;
public void completeSurvey() {
JavascriptExecutor executor = (JavascriptExecutor) driver;
executor.executeScript("arguments[0].click();", ages);
executor.executeScript("arguments[0].click();", sex);
executor.executeScript("arguments[0].click();", start);
executor.executeScript("arguments[0].click();", question1);
executor.executeScript("arguments[0].click();", question2);
executor.executeScript("arguments[0].click();", question3);
executor.executeScript("arguments[0].click();", question4);
executor.executeScript("arguments[0].click();", question5);
executor.executeScript("arguments[0].click();", question6);
executor.executeScript("arguments[0].click();", question7);
executor.executeScript("arguments[0].click();", question8);
executor.executeScript("arguments[0].click();", question9);
//executor.executeScript("arguments[0].click();", question10);
// JavascriptExecutor js = (JavascriptExecutor) driver;
// js.executeScript("window.scrollBy(0,200)", "");
executor.executeScript("arguments[0].click();", question10a);
executor.executeScript("arguments[0].click();", question10b);
executor.executeScript("arguments[0].click();", question10c);
executor.executeScript("arguments[0].click();", question10d);
executor.executeScript("arguments[0].click();", question10e);
executor.executeScript("arguments[0].click();", question10f);
executor.executeScript("arguments[0].click();", question11);
continua.click();
disclaimer.click();
WebDriverWait wait = new WebDriverWait(driver, 30);
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath(xpath = "//div[contains(@class,'question-14')]//a[@id='next']")));
continua.click();
代码遍历此调查问卷的每个步骤。我需要单击最后一个“继续”按钮。
对于那个特定的下一个按钮,您可能需要定义一个单独的 xpath:
(xpath = "//div[contains(@class,'actions')]//a[@class='btn']")
试试这个,如果有效请告诉我。
我看到您的定位器是正确的,但是您应该等待继续按钮的可见性而不是存在,因为它甚至在您选择免责声明按钮之前就已经存在。但是,在选择免责声明之前,继续按钮存在但被禁用。所以我想当您尝试在它仍处于禁用状态时单击它时,将继续按钮更改为启用需要一些时间。
所以,请从
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath(xpath = "//div[contains(@class,'question-14')]//a[@id='next']")));
至
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(xpath = "//div[contains(@class,'question-14')]//a[@id='next']")));