Как обрабатывать iframe в Selenium WebDriver с помощью java

4t43t4

В этом случае существует iframe в iframe . И я должен выбрать внешний iframe чтобы перейти во внутренний iframe и написать в теле, которое находится во внутреннем iframe .

Затем я должен выйти из внутреннего iframe в внешний iframe и нажать кнопку OK (которая находится во внешнем iframe ).

Следующий мой код

 /*Line 1 */ driver.switchTo().frame("cq-cf-frame"); /* 2 */ driver.findElement(By.css("#extdd-9 > div.tblRow > input.edititem").click(); /* 3 */ driver.switchT().Frame("cq-gen379"); /* 4 */ driver.findElement(By.id("CQrte").sendKeys("Tnx"); /* 5 */ selenium.selectFrame("relative=up"); /* 6 */ driver.findElement(By.xpath("//button[text()='OK']")).click(); 

Ниже приведена моя проблема:

Мой тестовый код работает отлично до строки 4, т. Е. Записывается в тело, но я хочу выйти из внутреннего в внешний iframe он говорит, что элемент //button[text()='OK'] не найден.

Я попытался использовать индекс, родитель, родственник, но не повезло.

ПРИМЕЧАНИЕ. Если я не выбираю внутренний кадр (cq-gen379). Я могу нажать кнопку « OK .

В Webdriver вы должны использовать driver.switchTo().defaultContent(); чтобы выйти из кадра. Сначала вам нужно выйти из всех кадров, а затем снова переключиться на внешний кадр.

 // between step 4 and step 5 // remove selenium.selectFrame("relative=up"); driver.switchTo().defaultContent(); // you are now outside both frames driver.switchTo().frame("cq-cf-frame"); // now continue step 6 driver.findElement(By.xpath("//button[text()='OK']")).click(); 

Вы должны вернуться из Iframe со следующим кодом:

 driver.switchTo().frame(driver.findElement(By.id("frameId"))); //do your stuff driver.switchTo().defaultContent(); 

надеюсь, это поможет

Вам нужно сначала найти iframe . Вы можете сделать это, используя следующую инструкцию.

 WebElement iFrame= driver.findElement(By.tagName("iframe")); 

Затем вы можете перейти к нему с switchTo метода switchTo для объекта WebDriver .

 driver.switchTo().frame(iFrame); 

И чтобы вернуться к родительскому фрейму, вы можете использовать switchTo().parentFrame() или если вы хотите вернуться к основному (или самому родительскому) кадру, вы можете использовать switchTo().defaultContent(); ,

 driver.switchTo().parentFrame(); // to move back to parent frame driver.switchTo().defaultContent(); // to move back to most parent or main frame 

Надеюсь, поможет.

 WebDriver driver=new FirefoxDriver(); driver.get("http://www.java-examples.com/java-string-examples"); Thread.sleep(3000); //Switch to nested frame driver.switchTo().frame("aswift_2").switchTo().frame("google_ads_frame3"); 

Чтобы вернуться к исходному фрейму, используйте:

 driver.switchTo().parentFrame(); 

Чтобы вернуться к первому / основному кадру, используйте:

 driver.switchTo().defaultContent(); 

Ниже подход обработки кадров: когда ни один идентификатор или имя не предоставляется в рамке вложенного кадра

 WebElement element =driver.findElement(By.xpath(".//*[@id='block-block19']//iframe")); driver.switchTo().frame(element); driver.findElement(By.xpath(".//[@id='carousel']/li/div/div[3]/a")).click(); 

Рамки для обработки веб-драйверов Selenium
Невозможно щелкнуть iframe непосредственно через XPath, так как это iframe. Сначала мы должны переключиться на фрейм, а затем щелкнуть по xpath.

driver.switchTo().frame() имеет несколько перегрузок.

  1. driver.switchTo().frame(name_or_id)
    Здесь у вашего iframe нет идентификатора или имени, поэтому не для вас.

  2. driver.switchTo().frame(index)
    Это последний вариант выбора, потому что использование индекса недостаточно стабильно, как вы могли себе представить. Если это ваш единственный iframe на странице, попробуйте driver.switchTo().frame(0)

  3. driver.switchTo().frame(iframe_element)
    Самый распространенный. Вы определяете свой iframe как другие элементы, а затем передаете его в метод.

driver.switchTo(). defaultContent (); [parentFrame, defaultContent, frame] (); [parentFrame, defaultContent, frame]

 // Based on index position: int frameIndex = 0; List listFrames = driver.findElements(By.tagName("iframe")); System.out.println("list frames "+listFrames.size()); driver.switchTo().frame(listFrames.get( frameIndex )); // XPath|CssPath Element: WebElement frameCSSPath = driver.findElement(By.cssSelector("iframe[title='Fill Quote']")); WebElement frameXPath = driver.findElement(By.xpath(".//iframe[1]")); WebElement frameTag = driver.findElement(By.tagName("iframe")); driver.switchTo().frame( frameCSSPath ); // frameXPath, frameTag driver.switchTo().frame("relative=up"); // focus to parent frame. driver.switchTo().defaultContent(); // move to the most parent or main frame // For alert's Alert alert = driver.switchTo().alert(); // Switch to alert pop-up alert.accept(); alert.dismiss(); 

Тест XML:

  ... parentFrame() « context remains unchanged.  | ->    ... defaultContent() « driver focus to top window/first frame.  | -> ... defaultContent() « driver focus to top window/first frame.  frame("relative=up") « focus to parent frame.    

Преобразование RC в Java-команды Web-драйвера. ссылка .


– это элемент HTML, который определяет определенную область, в которой может отображаться другой документ HTML. Кадр должен использоваться в . « Устаревший . Не для использования на новых веб-сайтах.

  • Selenium: Как остановить процесс geckodriver, влияющий на память ПК, не вызывая driver.quit ()?
  • ссылка на устаревший элемент: элемент не привязан к документу страницы
  • Как обрабатывать новое окно в Selenium WebDriver с помощью Java?
  • Всплывающие windows в seleniumе
  • В чем разница между Implicit wait Vs. Явное ожидание в selenium webdriver?
  • Как я могу подключиться к браузеру, открытому webdriver с seleniumом?
  • WebDriver: проверьте, существует ли элемент?
  • SyntaxError: использование const в строгом режиме?
  • Какой профиль использует Selenium WebDriver по умолчанию?
  • Селен WebDriver и DropDown Boxes
  • Эквивалент waitForVisible / waitForElementPresent в тестах Selenium WebDriver с использованием Java?
  • Давайте будем гением компьютера.