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();
}
}
# 1 楼答案
当链接在新选项卡中打开时,您需要将驱动程序切换到新选项卡,为此,您可以使用以下代码:
如果要切换到原始选项卡,则需要使用:
# 2 楼答案
我已经遇到了同样的问题好几天了,看起来这实际上是chromedriver的问题。我的解决方案是在chromedriver选项中添加以下标志/参数:
Here是我指的chromedriver问题(和解决方案)
如果该标志不起作用,您也可以尝试升级到chromedriver v75