#java #selenium #firefox #iframe #selenium-chromedriver
Вопрос:
Описание проблемы:
Я не могу переключиться на определенный кадр через Chrome v92, несмотря на то, что это легко сделать через Firefox.
Пример кода:
@Test
void auto_015_5() {
int bet = 7;
driver.navigate().to("https://boademo.com/");
driver.switchTo().frame(0);
List < WebElement > counters = driver.findElements(By.xpath("//div[@class='counter']"));
counters.get(0).click();
List < WebElement > marketOptions = driver.findElements(By.xpath("//div[@class='au-target market-option row nowrap can-place-bets']"));
for (int i = 0; i <= (bet * 3) - 1; i = 3) {
WebElement currentOption = marketOptions.get(i);
JavascriptExecutor je = (JavascriptExecutor) driver;
if (i % 6 == 0 amp;amp; i >= 6) {
je.executeScript("arguments[0].scrollIntoView(true);", marketOptions.get(i - 6));
}
currentOption.click();
}
driver.switchTo().defaultContent();
driver.switchTo().frame(1);
}
Шаги по воспроизведению:
Перейдите по ссылке
Переключитесь на нужный кадр (className = 'boa-iframe')
Выберите любое спортивное мероприятие из 'Matches' Lobby.
Выберите ЛЮБОЙ рынок, чтобы запросить купон на ставку (bottom-right).
Переключитесь на содержимое по умолчанию.
Попытайтесь переключиться на рамку купона ставки (className = 'boa-overlay-iframe')
NoSuchFrameException()
Комментарии:
1. Пожалуйста, покажите код, который вы пробовали до сих пор ? и в чем же заключается ошибка ?
2. Ошибка — это не такой кадр
3. Что такое
rt.acceptPopUp();
специальноrt
?4. Оставил его там случайно, ничего особенного. RT-это объект, который создает экземпляр моего класса TestRunner. acceptPopUp просто нажимает кнопку «Принять» во всплывающем окне
5. Пожалуйста, смотрите ниже, это работает в моем местном. Я надеюсь, что это сработает и для вас тоже.
Ответ №1:
- Вы можете переключиться на
iframe
с помощью явного ожидания. - Индексация не является предпочтительной.
Пример кода :
driver.manage().window().maximize();
WebDriverWait wait = new WebDriverWait(driver, 30);
driver.manage().timeouts().implicitlyWait(300, TimeUnit.SECONDS);
driver.get("https://boademo.com/");
wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("button.button-agree"))).click();
int bet = 7;
wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.cssSelector("iframe.boa-iframe")));
List < WebElement > counters = driver.findElements(By.xpath("//div[@class='counter']"));
counters.get(0).click();
List < WebElement > marketOptions = driver.findElements(By.xpath("//div[@class='au-target market-option row nowrap can-place-bets']"));
for (int i = 0; i <= (bet * 3) - 1; i = 3) {
WebElement currentOption = marketOptions.get(i);
JavascriptExecutor je = (JavascriptExecutor) driver;
if (i % 6 == 0 amp;amp; i >= 6) {
je.executeScript("arguments[0].scrollIntoView(true);", marketOptions.get(i - 6));
}
currentOption.click();
}
driver.switchTo().defaultContent();
wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.cssSelector("iframe[class='boa-overlay-iframe']")));
System.out.println("You are inside boa-overlay-iframe");
Комментарии:
1. Код действительно работает для меня, однако моя проблема в том, что я не могу переключиться на iframe className = ‘boa-overlay-iframe’.
2. Где находится этот iframe ? Это будет потом
counters.get(0).click();
?3. ДА. Он содержит купон на ставку, отображаемый в правом нижнем углу
4. @NickBorg : Обновлено выше в нижней части кода, дайте мне знать, если это сработает.
5. к сожалению, нет… org.openqa.selenium. Исключение по времени: Ожидаемое условие не выполнено: ожидание доступности кадра: По.cssSelector: iframe[класс=’boa-наложение-iframe’] (попытка в течение 30 секунд с интервалом 500 миллисекунд)