furiousduck
(Alexander Petrovich)
July 3, 2012, 7:03am
#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
polusok
(Mykhailo Poliarush)
July 3, 2012, 8:14am
#2
надо удостовериться, что iframe есть на оригинальной странице
попробой переключиться не по имени, а по индексу
и попробуй сделать простой тест для этой страницы и прогнать в интерактивном режие python
dakota
(dakota)
July 3, 2012, 8:21am
#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! там одинарные кавычки используются. В большинстве скриптовых языков между " и ' есть разница
furiousduck
(Alexander Petrovich)
July 3, 2012, 8:29am
#4
driver.switch_to_frame(driver.find_element_by_tag_name(“iframe”)
Вот такая конструкция помогла.
kainreto
(kain-reto)
July 3, 2012, 8:35am
#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. Бывает нужно ждать загрузки фрейма. Тут неплохо обернуть свичь в метод который будет ждать загрузку искомого фрейма.
furiousduck
(Alexander Petrovich)
July 3, 2012, 9:12am
#6
Спасибо за подробные инструкции. Запара собственно была в том, что не обозначил элемент. Просто в доках прочитал, что он по имени фрэйма сам свичаться должен.