簡體   English   中英

Selenium switchTo返回錯誤org.openqa.selenium.WebDriverException:未知錯誤:無法確定加載狀態

[英]Selenium switchTo return error org.openqa.selenium.WebDriverException: unknown error: cannot determine loading status

我有點擊超鏈接的方案,並將打開新選項卡(活動窗口將點擊超鏈接后移動到新選項卡)

當我嘗試使用switchTo()方法將webdriver移動到新選項卡時,然后WebDriverWait.until瀏覽器自動關閉並顯示錯誤

org.openqa.selenium.WebDriverException: unknown error: cannot determine loading status
from no such execution context
  (Session info: chrome=73.0.3683.103)

我使用System.out.println(driver.getWindowHandle()) ,我可以看到驅動程序移動到新選項卡。

我如何修復上述錯誤? 我嘗試使用Iterator循環到windowHandle

似乎無法使用WebDriverWait.until(ExpectedConditions)等待新選項卡。 始終收到錯誤cannot determine loading status from no such execution context

奇怪的是,我可以使用Thread.sleep(1000)

在這種情況下我怎么能避免使用Thread.sleep? 因為隱式等待也不行

使用Thread.sleep()工作代碼

public class MyCode {
    private WebDriver driver;
    private WebDriverWait wait;

    @Test
    public void openPrestaShopFromDemoWebsite() {
        System.setProperty("webdriver.chrome.driver", "chromedriver");
        ChromeOptions chromeOptions = new ChromeOptions()
                .addArguments("--start-maximized", "--incognito");

        driver = new ChromeDriver(chromeOptions);
        driver.navigate().to("http://demo.prestashop.com");
        wait = new WebDriverWait(driver, 10);
        wait.until(ExpectedConditions.invisibilityOfElementLocated(By.id("loadingMessage")));

        driver.switchTo().frame("framelive");
        String parentTab = driver.getWindowHandle();
        driver.findElement(By.partialLinkText("Ecommerce software by PrestaShop")).click();

        Set<String> windowHandles = driver.getWindowHandles();
        Iterator<String> it = windowHandles.iterator();

        while (it.hasNext()) {
            String newTab = it.next();

            if (!parentTab.equals(newTab)) {
                driver.switchTo().window(newTab);

                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

                wait.until(ExpectedConditions.titleIs("Create and develop your business with PrestaShop"));
                driver.close();
            }
        }

        driver.switchTo().window(parentTab);
        driver.switchTo().frame("framelive");
        assertThat(driver.findElement(By.linkText("Personal info")).isDisplayed());

        driver.quit();

    }
}

不工作的代碼(不能從沒有這樣的執行上下文確定加載狀態)

public class MyCode {
    private WebDriver driver;
    private WebDriverWait wait;
    private WebElement element;

    @Test
    public void openPrestaShopFromDemoWebsite() {
        System.setProperty("webdriver.chrome.driver", "chromedriver");
        ChromeOptions chromeOptions = new ChromeOptions()
                .addArguments("--start-maximized", "--incognito");

        driver = new ChromeDriver(chromeOptions);
        driver.navigate().to("http://demo.prestashop.com");
        wait = new WebDriverWait(driver, 10);
        wait.until(ExpectedConditions.invisibilityOfElementLocated(By.id("loadingMessage")));

        driver.switchTo().frame("framelive");
        String parentTab = driver.getWindowHandle();
        driver.findElement(By.partialLinkText("Ecommerce software by PrestaShop")).click();

        Set<String> windowHandles = driver.getWindowHandles();
        Iterator<String> it = windowHandles.iterator();

        while (it.hasNext()) {
            String newTab = it.next();

            if (!parentTab.equals(newTab)) {
                driver.switchTo().window(newTab);

                wait.until(ExpectedConditions.titleIs("Create and develop your business with PrestaShop"));
                driver.close();
            }
        }

        driver.switchTo().window(parentTab);
        driver.switchTo().frame("framelive");
        assertThat(driver.findElement(By.linkText("Personal info")).isDisplayed());

        driver.quit();

    }
}

我已經遇到了這個問題幾天,似乎它實際上是chromedriver的一個問題。 對我有用的解決方案是在chromedriver選項中添加以下標志/參數:

--disable-site-isolation-trials

是我所指的chromedriver問題(和解決方案)。

如果該標志不起作用,您也可以嘗試升級到chromedriver v75

當鏈接在新選項卡中打開時,您需要將驅動程序切換到新選項卡,為此,您可以使用以下代碼:

ArrayList<String> tabs = new ArrayList<String> (driver.getWindowHandles());
driver.switchTo().window(tabs.get(1));

如果要切換到原始選項卡,則需要使用:

driver.switchTo().window(tabs.get(0));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM