有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Selenium用于返回错误组织。openqa。硒。WebDriverException:未知错误:无法确定加载状态

我需要单击超链接,并将打开新选项卡(单击超链接后活动窗口将移动到新选项卡)

当我尝试使用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()),我可以看到驱动程序移动到新选项卡

如何修复上述错误? 我尝试过使用迭代器将循环转换为windowHandle

似乎无法使用WebDriverWait。直到(预期条件)等待新选项卡。 总是得到一个错误cannot determine loading status from no such execution context

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

如何避免使用线程。在这种情况下睡觉? 因为隐式等待也不起作用

使用线程处理代码。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) 个答案

  1. # 1 楼答案

    当链接在新选项卡中打开时,您需要将驱动程序切换到新选项卡,为此,您可以使用以下代码:

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

    如果要切换到原始选项卡,则需要使用:

    driver.switchTo().window(tabs.get(0));
    
  2. # 2 楼答案

    我已经遇到了同样的问题好几天了,看起来这实际上是chromedriver的问题。我的解决方案是在chromedriver选项中添加以下标志/参数:

     disable-site-isolation-trials
    

    Here是我指的chromedriver问题(和解决方案)

    如果该标志不起作用,您也可以尝试升级到chromedriver v75