Selenium переключается на возврат ошибки org.openqa.selenium.WebDriverException: неизвестная ошибка: не удается определить статус загрузки

#java #selenium #selenium-webdriver #webdriver

#java #selenium #selenium-webdriver #webdriver

Вопрос:

У меня есть сценарий, чтобы щелкнуть гиперссылку и открыть новую вкладку (активное окно переместится на новую вкладку после нажатия гиперссылки)

Когда я пытаюсь перейти с webdriver на новую вкладку с помощью switchTo() метода, затем 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()) и вижу, как драйвер переходит на новую вкладку.

Как я могу исправить вышеуказанную ошибку? Я попытался использовать итератор для цикла в WindowHandle

Похоже, не удается использовать WebDriverWait.until(ожидаемые условия) для ожидания новой вкладки. Всегда выдает ошибку 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();

    }
}
 

Комментарии:

1. Обновите вопрос с помощью блока кода для … нажмите гиперссылку … шаг

Ответ №1:

Я сталкивался с этой же проблемой в течение нескольких дней, и кажется, что на самом деле это проблема с chromedriver. Решение, которое сработало для меня, заключалось в добавлении следующего флага / аргумента в параметры вашего chromedriver:

 --disable-site-isolation-trials
 

Вот проблема с chromedriver (и ее решение) Я имею в виду.

Если флаг не работает, вы также можете попробовать обновить chromedriver до версии 75

Комментарии:

1. Спасибо .. это сделано для меня.

2. Да!!! Вот и все!!!

Ответ №2:

Поскольку ссылка открывается на новой вкладке, вам необходимо переключить драйвер на новую вкладку, и для этого вы можете использовать следующий код:

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

И если вы хотите переключиться на исходную вкладку, вам необходимо использовать:

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

Комментарии:

1. не работает, после switchTo() и последующего WebDriverWait.until webdriver возвращает cannot determine loading status from no such execution context

2. @J.Doem Можете ли вы добавить код, который вы использовали после переключения вкладки?