Selenium switchTo return error org.openqa.selenium.WebDriverException: неизвестная ошибка: невозможно определить состояние загрузки - PullRequest
5 голосов
/ 17 апреля 2019

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

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

    }
}

Ответы [ 2 ]

0 голосов
/ 10 июня 2019

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

--disable-site-isolation-trials

Здесь - это проблема (и решение) chromedriver, на которую я ссылаюсь.

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

0 голосов
/ 17 апреля 2019

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

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

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

driver.switchTo().window(tabs.get(0));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...