我正在尝试在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部分页面上,当我执行点击时,我得到的元素当前不可见,因此可能无法与之交互。
请帮忙。
答案 0 :(得分:0)
您应该使用ExpectedCondition
visibilityOfElementLocated
代替presenceOfElementLocated
WebDriverWait wait = new WebDriverWait(driver, 30);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("Form_Form_AdditionalInformation"))).sendKeys("12345");
答案 1 :(得分:0)
在这种情况下,您应该尝试使用JavaScriptExecutor
,如下所示: -
WebDriverWait wait = new WebDriverWait(driver, 30);
WebElement el = wait.until(ExpectedConditions.presenceOfElementLocated(By.id("Form_Form_AdditionalInformation")));
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_AdditionalInformation"))).sendKeys("12345");
,如果您仍然收到异常,请尝试使用JavascriptExecutor
作为第二个选项。
希望它会对你有所帮助.. :)