#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 Можете ли вы добавить код, который вы использовали после переключения вкладки?