baxatob
(Yury)
22.Февраль.2015 17:25:00
#1
Доброго дня!
Есть такая структура страницы:
<html>
<head>
<body class="en">
<div class="header clearfix">
<div class="main">
<tr class="mceFirst" role="presentation">
<tr class="mceLast">
<td class="mceIframeContainer">
<iframe id="micro_bundle_ifr" frameborder="0" src="javascript:""" allowtransparency="true">
<html>
<body>
Не получается переключиться в iframe.
Пробовал так:
frame = driver.find_element(By.ID, 'micro_bundle_ifr')
driver.switch_to_frame(frame)
Выбрасывается ошибка: NoSuchFrameException: Message: Unable to locate frame:
Та же беда, если использовать XPATH.
Что я не так делаю?
Спасибо!
maxmalunov
(Максим Малунов)
22.Февраль.2015 18:29:37
#2
Я бі попробывал (Java).
webDriver.switchTo().frame( 1 );
webDriver.switchTo().defaultContent()
p/s Это попыткa переключения первая ? Или вы уже переключались в другой frame ?
ex3me0
(SS)
22.Февраль.2015 18:44:55
#3
Все же проверяйте свой селектор, FirePath’ом например
Потестил, у меня Ваш пример работает в таком виде:
app_frame = driver.find_element_by_xpath('//iframe[@id="micro_bundle_ifr"]')
driver.switch_to.frame(app_frame)
Возможно несколько таких фреймов на странице (с одинаковыми id), и тот, который Вам нужен - идет вторым по-порядку, проверьте:
frames = driver.find_elements_by_xpath('//iframe')
print(len(frames))
Либо, как вариант, страница на которой находится этот фрейм - находится на втором уровне вложенности (т.е. сама является фреймом)
baxatob
(Yury)
22.Февраль.2015 19:24:59
#4
Благодарю за ответы!
Попытка переключения первая.
В FirePath у меня это отображается так, что есть TopWindow и некий iframe#
То есть в FirePath этот вложенный элемент находится. Он не находится на стадии запуска теста.
Фрейм на странице единственный. Это текстовое поле с кнопками редактирования
ex3me0
(SS)
22.Февраль.2015 19:45:36
#5
В принципе можете выложить ссылку на исследуемую страницу, если она не под секретом.
Быстрее найдем проблемное место
baxatob
(Yury)
22.Февраль.2015 19:55:15
#6
Нашел ошибку!
У меня фрейм хранился только как локатор в классе:
class Page:
frame = (By.ID, 'micro_bundle_ifr')
И я так на него и ссылался, а надо было:
driver.find_element(*Page.frame)
Спасибо еще раз за помощь! И простите великодушно
1ole4g5
(Oleg V)
22.Февраль.2015 19:56:39
#7
Ещё можно попробовать поставить принудительные ожидания перед и после переключения во фрейм
ex3me0
(SS)
22.Февраль.2015 20:01:51
#8
бывает, сам иногда парюсь с распаковкой
в следующий раз - выкладывайте полный стектрейс