У меня есть этот код:
WebElement iframeElement = driver.findElement(By.xpath(xpIframe));
driver.switchTo().frame(iframeElement);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(xpLucka)));
driver.findElement(xpLucka).click(); //this click fails
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(xpSvara))); //TimeoutException
driver.findElement(xpSvar).click();
driver.findElement(xpSvara).click();
Часто происходит сбой на строке с комментарием //TimeoutException. Когда я смотрю на состояние веб-страницы в браузере, который остается открытым, становится ясно, что щелчок по строке до этого не удался. Это смущает. Элемент явно есть, я без проблем нахожу его в веб-инспекторе, и wait.until в предыдущей строке явно преуспевает.
Следующее, что я хочу убедиться, что оно не подведет, — это утверждение switchTo(). Как я могу проверить switchTo-call?




Чтобы click() на элементе внутри <iframe> вам нужно:
Вызовите WebDriverWait для желаемого кадраToBeAvailableAndSwitchToIt.
Вызовите WebDriverWait для нужного элементаToBeClickable.
Вы можете использовать следующие стратегии поиска:
new WebDriverWait(driver, 10).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.xpath("xpIframe")));
new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(By.xpath("xpLucka"))).click();
Вы можете найти пару соответствующих обсуждений в:
При автоматическом тестировании я столкнулся с некоторыми трудностями из-за того, что WebDriverWait не всегда работает. Как вы уже знаете, Thread.sleep(3000); не рекомендуется использовать, когда дело доходит до автоматического тестирования, однако иногда вы должны его использовать. Итак, для целей тестирования я бы намеренно использовал:
Thread.sleep(3000); --> add some time, to make sure it switched to iframe
WebElement iframeElement = driver.findElement(By.xpath(xpIframe));
driver.switchTo().frame(iframeElement);
Thread.sleep(3000);
driver.findElement(xpLucka).click(); --> see if it will click on element
Thread.sleep(3000);
driver.findElement(xpSvar).click();
Thread.sleep(3000);
driver.findElement(xpSvara).click(); --> same for all other elements