由于元素不可见,selenium web驱动程序无法单击下一个按钮

时间:2016-07-07 04:27:07

标签: selenium-webdriver

我正在尝试在Web表单上自动化测试,该表单有三个页面,每个页面都有一个下一个按钮。

这是HTML:

    <div id="Section1Page" class="field fieldgroup bus-form-page nolabel" style="display: block;">
<div class="middleColumn fieldgroup">
   <input class="prev" type="button" value="Previous" style="display: none;">
   <input class="next" type="button" value="Next">
</div>
<div id="Section2Page" class="field fieldgroup bus-form-page nolabel" style="display: none;">
<div class="middleColumn fieldgroup">
<div class="fieldgroup-field first odd">
<div class="fieldgroup-field even">
<div class="fieldgroup-field odd">
<div class="fieldgroup-field even">
<div class="fieldgroup-field odd">
   <div class="fieldgroup-field last even">
      <div class="fieldholder-small">
      </div>
   </div>
   <input class="prev" type="button" value="Previous">
   <input class="next" type="button" value="Next">
</div>

我可以使用以下方法点击第1页的下一个按钮:

driver.findElement(By.className("next")).click();

然而,在第2部分页面上,当我执行点击时,我得到的元素当前不可见,因此可能无法与之交互。

请帮忙。

2 个答案:

答案 0 :(得分:0)

您应该使用ExpectedCondition visibilityOfElementLocated代替presenceOfElementLocated

WebDriverWait wait = new WebDriverWait(driver, 30);   
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("Form_Form_Addition‌​alInformation"))).sendKeys("12345");

答案 1 :(得分:0)

在这种情况下,您应该尝试使用JavaScriptExecutor,如下所示: -

WebDriverWait wait = new WebDriverWait(driver, 30);   
WebElement el = wait.until(ExpectedConditions.presenceOfElementLocated(By.id("Form_Form_Addition‌​alInformation")));

JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("arguments[0].value = arguments[1]", el, "12345");

已修改: - 如果您有多个next按钮,并且想要通过检查其可见性找到所有按钮和click到可见按钮,请尝试按以下步骤操作: - < / p>

 List<WebElement> buttons = driver.findElements(By.className("next"));

 for (WebElement button : buttons) {
         If(button. isDisplayed()) {
                button. click();
          }
  }

注意: - 我建议您先尝试使用visibilityOfElementLocated代替presenceOfElementLocated,然后直接使用sendKeys作为wait.until(ExpectedConditions.presenceOfElementLocated(By.id("Form_Form_Addition‌​alInformation"))).sendKeys("12345"); ,如果您仍然收到异常,请尝试使用JavascriptExecutor作为第二个选项。

希望它会对你有所帮助.. :)