t.me/atinfo_chat Telegram группа по автоматизации тестирования

[solved] Selenium WD + frames


(Alexander Petrovich) #1

Привет!

На странице есть CKE редактор текста. Чтобы в нём работать, нужно, я так понимаю, переключиться на соответствующий фрэйм (iframe на скриншоте)

Однако, driver.switch_to_frame("iframe") не помогает. NoSuchFrameException: Message: u'The frame could not be found'

Я впервые сталкиваюсь с фрэймами. Прошу попытаться объяснить что да как
 
http://s2.ipicture.ru/uploads/20120703/omI1LRb5.png

(Mykhailo Poliarush) #2

надо удостовериться, что iframe есть на оригинальной странице

попробой переключиться не по имени, а по индексу

и попробуй сделать простой тест для этой страницы и прогнать в интерактивном режие python


(dakota) #3

http://selenium.googlecode.com/svn/trunk/docs/api/py/webdriver_remote/selenium.webdriver.remote.webdriver.html?highlight=switch#selenium.webdriver.remote.webdriver.WebDriver.switch_to_frame

смотрите usage! там одинарные кавычки используются. В большинстве скриптовых языков между " и ' есть разница


(Alexander Petrovich) #4

driver.switch_to_frame(driver.find_element_by_tag_name(“iframe”)

Вот такая конструкция помогла.


(kain-reto) #5

1. Находи елемент

WebElement irame = driver.findElement(By.id('frameId));

2.  Свичемся на него:

driver.swichTo().frame(iframe);

3. Внутри фрейма с веб элементами работать так-же как и с начальной веб станицей.

Коментарии:

1. Если нужный фрейм вложен в другой фрейм, то нужно переходить к доченему фрейму.

driver.switchTo().frame(iframe).switchTo().frame(subiframe);

2. Если нужно нужно вернутся то стоит использовать 

driver.switchTo().defaultContent();

3. Бывает нужно ждать загрузки фрейма. Тут неплохо обернуть свичь в метод который будет ждать загрузку искомого фрейма.


(Alexander Petrovich) #6

Спасибо за подробные инструкции. Запара собственно была в том, что не обозначил элемент. Просто в доках прочитал, что он по имени фрэйма сам свичаться должен.