Geb/Selenium - 其他元素将收到点击
Geb/Selenium - Other element would receive the click
我混合使用 Geb 和 Selenium 对我们的门户网站进行前端测试。我们以前的开发人员实施了一个覆盖 div 来阻止在等待内容时对页面的任何访问。因此,我经常不得不等待此 div 不再可见,然后才能单击感兴趣的元素。
我应用了流畅的等待来检查覆盖 div 是否不可见,但有时点击会转到此覆盖 div。这真的很奇怪:叠加层是不可见的。未附加到 DOM 树,但点击转到它。
怎么会这样?
我该怎么做才能解决这个问题?
替换流畅的等待:
protected final boolean waitForPageNotBusy(By by = By.className("busyOverlay")) {
log.debug("Waiting for page not busy...")
def timeout = 120
boolean isNotBusy = new FluentWait(driver)
.withMessage("Busy overlay still visible after $timeout seconds.")
.pollingEvery(1, TimeUnit.SECONDS)
.withTimeout(timeout, TimeUnit.SECONDS)
.ignoring(org.openqa.selenium.NoSuchElementException.class)
.ignoring(UnhandledAlertException.class)
.until(ExpectedConditions.invisibilityOfElementLocated(by) as Function);
isNotBusy
}
通过 Saifur 建议的循环:
protected final boolean waitForPageNotBusy() {
By by = By.className("busyOverlay")
log.debug("Waiting for element to disappear: {}", by.toString())
try {
while (driver.findElements(by).size() > 0) {
log.debug("Element still visible: {}", by.toString())
sleep(1000)
}
} catch (NoSuchElementException nse) {
log.debug(nse.message)
return true
}
}
可以解决我的问题。
我混合使用 Geb 和 Selenium 对我们的门户网站进行前端测试。我们以前的开发人员实施了一个覆盖 div 来阻止在等待内容时对页面的任何访问。因此,我经常不得不等待此 div 不再可见,然后才能单击感兴趣的元素。
我应用了流畅的等待来检查覆盖 div 是否不可见,但有时点击会转到此覆盖 div。这真的很奇怪:叠加层是不可见的。未附加到 DOM 树,但点击转到它。
怎么会这样? 我该怎么做才能解决这个问题?
替换流畅的等待:
protected final boolean waitForPageNotBusy(By by = By.className("busyOverlay")) {
log.debug("Waiting for page not busy...")
def timeout = 120
boolean isNotBusy = new FluentWait(driver)
.withMessage("Busy overlay still visible after $timeout seconds.")
.pollingEvery(1, TimeUnit.SECONDS)
.withTimeout(timeout, TimeUnit.SECONDS)
.ignoring(org.openqa.selenium.NoSuchElementException.class)
.ignoring(UnhandledAlertException.class)
.until(ExpectedConditions.invisibilityOfElementLocated(by) as Function);
isNotBusy
}
通过 Saifur 建议的循环:
protected final boolean waitForPageNotBusy() {
By by = By.className("busyOverlay")
log.debug("Waiting for element to disappear: {}", by.toString())
try {
while (driver.findElements(by).size() > 0) {
log.debug("Element still visible: {}", by.toString())
sleep(1000)
}
} catch (NoSuchElementException nse) {
log.debug(nse.message)
return true
}
}
可以解决我的问题。