![](/img/trans.png)
[英]org.openqa.selenium.WebDriverException: unknown error: cannot determine loading status
[英]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.