Selenium Java-如果元素存在,请单击;如果元素未找到,请继续执行下一个命令
我正在尝试创建一个脚本来测试一个网站(js应用程序),代码几乎完成了,但我遇到了一个问题。脚本应该在网站上编辑一个问题(该问题使用了数据库中的许多变量),并且取决于脚本是否失败或者是否有其他人编辑了该问题,脚本有可能获得弹出消息(而不是单独的窗口或新选项卡)。我希望代码: 如果元素存在,请单击该元素;如果元素不存在,请转到下一行代码 我尝试使用,但没有帮助:Selenium Java-如果元素存在,请单击;如果元素未找到,请继续执行下一个命令,java,selenium,automation,webdriver,Java,Selenium,Automation,Webdriver,我正在尝试创建一个脚本来测试一个网站(js应用程序),代码几乎完成了,但我遇到了一个问题。脚本应该在网站上编辑一个问题(该问题使用了数据库中的许多变量),并且取决于脚本是否失败或者是否有其他人编辑了该问题,脚本有可能获得弹出消息(而不是单独的窗口或新选项卡)。我希望代码: 如果元素存在,请单击该元素;如果元素不存在,请转到下一行代码 我尝试使用,但没有帮助: Alert alert = driver.switchTo().alert(); alert.accept(); 我的代码: drive
Alert alert = driver.switchTo().alert();
alert.accept();
我的代码:
driver.findElement(By.xpath("//button[2]")).click();
// Click unselect all
Thread.sleep(1000);
driver.findElement(By.linkText("Romania")).click();
// Select Romania
log.debug("Select Romania");
Thread.sleep(2000);
driver.findElement(By.linkText("Germany")).click();
// Select Germany
log.debug("Select Germany");
Thread.sleep(2000);
driver.findElement(By.xpath("//div[4]/a")).click();
// Click Save Button
log.debug("Click Save");
Thread.sleep(3000);
**driver.findElement(By.xpath("//div[4]/div/div/div/div/div/button")).click();**
// Pop-up message
log.debug("Click Pop-up message");
Thread.sleep(3000);
/////////////// Single Answer
driver.findElement(By.linkText("Change")).click();
// Click Change Template
log.debug("Click Change");
Thread.sleep(2000);
您可以找到****之间有问题的行(弹出),如果元素存在,我如何单击,或者如何移动到driver.findElement(By.linkText(“更改”)。单击();如果未找到元素
如果需要更多信息,请告诉我
编辑:
提供有关弹出窗口出现原因的更多详细信息。脚本编辑一个问题,这些问题有多个模板,脚本应该在选择模板后遍历每个模板。脚本将数据库中的一个变量与问题关联。
模板:
单答案问题
单答案下拉式问题
多答案问题
多答案下拉式问题
日期
当模板从多个答案更改为单个答案/日期或以其他方式更改时,弹出消息显示为警告(使用的变量将被删除)。
在理想情况下,如果脚本成功完成(它将以单答案下拉列表结束-第一个问题是单答案,因此不会出现弹出窗口),并且没有人编辑问题,我将不会遇到弹出窗口,但如果脚本在将模板更改为多个答案后由于x原因失败,当我重新启动脚本时,我将收到该弹出/警告
如上面的代码所示,更改问题的语言时也会出现此问题,如果遇到此问题,我有多个步骤
目前,为了让脚本运行并避免上述问题,我需要自己编辑问题,并在运行脚本之前选择特定的语言和模板。如果没有找到匹配的元素,则会抛出一个
NoTouchElementException
的实例
try {
WebElement popUp = driver.findElement(By./**your expression**/);
popUp.click();
} catch(NoSuchElementException | StaleElementReferenceException e) {
log.debug("Impossible to click the pop-up. Reason: " + e.toString());
}
我推荐两种方法
List<WebElement> button = driver.findElements(By.xpath("//div[4]//button"));
if (!button.isEmpty()) {
button.get(0).click();
}
....
不需要等待,只有以下选项:1。此时会出现按钮或2。按钮不出现。由于页面可能被其他用户编辑和更改,P可能希望使用wait。我尝试了上述命令,结果如下:-如果元素不存在,脚本将继续(这是我想要的)-如果元素存在,单击按钮后引发异常:org.openqa.selenium.WebDriverException:未知错误:元素。。。在点(770881)处不可单击。其他元素将收到单击:。。。(会话信息:chrome=58.0.3029.110)可能您访问了错误的元素?使用
.isClickable()
调用检查它。问题不在于元素,我需要在尝试后添加等待(因为单击按钮后会有延迟)。谢谢你的帮助
try{List<WebElement> button = (new WebDriverWait(driver,10)).until(ExpectedConditions.presenceOfElementsLocated(By.xpath("//div[4]//button")));
if (!button.isEmpty()) {
button.get(0).click();
}
}
catch(TimeoutException e)
{
}