Selenium / WebDriver switch_to parent_frame / default_content возвращает None - PullRequest
0 голосов
/ 27 октября 2019

У меня есть следующий код, это англоязычный веб-сайт.

У меня есть, Python 3.6 / Selenium / ChromeDriver v-77. Я использовал метод switch_to до iframe с id = f2.2 и отклонил предупреждение, открытое в этом кадре. Затем я попробовал switch_to.parent_frame () и switch_to.default_content (). Но оба возвращают None.

<html>
   <head>
   </head>
   <body>
       <iframe id="f1"><iframe>      // 1
       <iframe id="f2">              // 2
              <iframe id="f2.1">              // 2.1
                    <iframe id="f2.2">        // 2.2
                       <a href='http://link.com'>
                       // on click alert, dismiss
                    </iframe>
                    <div id='ac'></div>
              </iframe>
       </iframe>
   </body
</html>

Я хочу:

Шаг-1: войти в iframe [id = 'f2.2'] // Я достиг

Шаг-2: Получить данныеиз iframe [id = 'f2.2'] и отклонить предупреждение (запрос ajax) после нажатия кнопки, присутствующей в этом кадре

Когда я отклоняю / принимаю предупреждение, содержимое Dom обновляется в iframes [id = 'f2.1 ', id =' f2.2 ']

Шаг 3: Я хочу получить обновленные данные из div [id =' ac ']

Я использовал ожидания, ноне в состоянии получить данные. Я также пытался сохранить ответ метода window_handles [0] и использовал его после действия предупреждения, но он также не работал.

1 Ответ

0 голосов
/ 27 октября 2019

Существует несколько способов переключения между кадрами

Переключение на кадр по индексу:

driver.switchTo().frame(0);
driver.switchTo().frame(1);

Переключение на кадр по имени или идентификатору:

 driver.switchTo().frame("iframe1");
 driver.switchTo().frame("id of the element");

Пожалуйста, попробуйте решение:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get("http://somedomain/url_that_delays_loading")
try:
   driver.switchTo().defaultContent();
   driver.switchTo().frame(driver.findElement(By.id("f2")).findElement(By.id("f2.1")).findElement(By.id("f2.2")));
   wait = WebDriverWait(driver, 10)
   driver.find_element_by_link_text("http://link.com'").click()
   alert = driver.switch_to.alert
   alert_text = alert.text
   alert.dismiss()
   driver.switch_to.default_content()
   driver.switchTo().frame(driver.findElement(By.id("f2")).findElement(By.id("f2.1")));
   String text=driver.findElement(By.id("ac")).getText();
   System.out.println(text);
   driver.switch_to.default_content()

finally:
    driver.quit()
...