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

[Resolved] Не получается переключиться в iframe.

Доброго дня!
Есть такая структура страницы:

<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.
Что я не так делаю?
Спасибо!

Я бі попробывал (Java).

  1. webDriver.switchTo().frame( 1 );
  2. webDriver.switchTo().defaultContent()

p/s Это попыткa переключения первая ? Или вы уже переключались в другой frame ?

Все же проверяйте свой селектор, 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))

Либо, как вариант, страница на которой находится этот фрейм - находится на втором уровне вложенности (т.е. сама является фреймом)

Благодарю за ответы!
Попытка переключения первая.
В FirePath у меня это отображается так, что есть TopWindow и некий iframe#
То есть в FirePath этот вложенный элемент находится. Он не находится на стадии запуска теста.
Фрейм на странице единственный. Это текстовое поле с кнопками редактирования

В принципе можете выложить ссылку на исследуемую страницу, если она не под секретом.
Быстрее найдем проблемное место

Нашел ошибку!
У меня фрейм хранился только как локатор в классе:

class Page:
     frame = (By.ID, 'micro_bundle_ifr')

И я так на него и ссылался, а надо было:

driver.find_element(*Page.frame)

Спасибо еще раз за помощь! И простите великодушно :slight_smile:

Ещё можно попробовать поставить принудительные ожидания перед и после переключения во фрейм

:smile: бывает, сам иногда парюсь с распаковкой
в следующий раз - выкладывайте полный стектрейс :wink: