You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I struggled with whether this issue is most relevant to Selenium, Geckodriver, WebDriver, or Marionette/Firefox, but ultimately settled here.
Today, clicking a link that results in browser navigation is a blocking operation. I realize that we may not always get this right, but in most cases, this is true. For example:
HTML:
<a href="/resubmit.htm" id="resubmit">Resubmit</a>
TEST:
driver.findElement(By.id("resubmit")).click(); // Waits for the navigation to resubmit.htm.
WebElement element = driver.findElement(By.cssSelector(".somethingOnSubsequentPage"));
// Success!
However when a confirmation dialog determining whether navigation is triggered is added to the link, the click()/accept() no longer block on the navigation:
HTML:
<a href="/resubmit.htm" id="resubmit" onclick="javascript:return confirm('Are you sure?');">Resubmit</a>
TEST:
driver.findElement(By.id("resubmit")).click();
driver.switchTo().alert().accept(); // Does not wait for navigation to resubmit.htm.
WebElement element = driver.findElement(By.cssSelector(".somethingOnSubsequentPage"));
// Fail. :(
This request is to make link navigation a synchronous event (from a testing perspective), even when it results from a click() indirectly via JavaScript. Hopefully the approach would address the majority of cases, even if it cannot solve all.