Selenium Java(正确等待新页面加载)

时间:2018-09-11 06:28:57

标签: selenium load wait proper

这不是问题,而是信息共享(我想很多人都会使用它)

几天以来,一直试图提供一种最好的解决方案(没有sheninigans :-D)来等待新页面的加载,例如单击后。Ofc过去没有Thread.sleep或隐式等待

有人建议等到新页面的最后一个元素加载完毕,有人建议使用JS executor(document.readyState解决方案),有时它不起作用(在我的情况下,它总是给出完整的响应)

找到了另一个解决方案,以检查对当前页面上元素的引用何时会引发StaleElementReferenceException。但是...在这种情况下,此异常后页面无法加载。

我做了什么?将两个解决方案组合在一起,这总是对我有用。...一个确保文档未处于就绪状态(因为会引发staleElementReferenceException),另一个在此之后立即检查直到页面完全加载并给出readyState == complete < / p>

    while(true) {    
       try {
          //it's just an interaction (can be any) with element on current page
          anyElementFromCurrentPage.getText();
       } catch (StaleElementReferenceException e) {
            break;
       }
       waitForLoad(driver);
       return this;
    }

    void waitForLoad(WebDriver driver) {
       new WebDriverWait(driver, 30).until((ExpectedCondition<Boolean>) wd ->
                    ((JavascriptExecutor) wd).executeScript("return 
       document.readyState").equals("complete"));
    }

希望有些人会使用这种防弹解决方案:-)

1 个答案:

答案 0 :(得分:0)

因此,我使用C#工作,但Java与此类似。即使标记为“过时”,这也是我目前所使用的。

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(15));
wait.Until(ExpectedConditions.VisibilityOfAllElementsLocatedBy(By.Name("elementNameHere")));