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

Selenide, переключиться на iframe без id

Теги: #<Tag:0x00007f74889a6808> #<Tag:0x00007f74889a6718> #<Tag:0x00007f74889a6628> #<Tag:0x00007f74889a6538>

Впервые столкнулся с iframe

Раньше попадался iframe только с id, и я пользовался вот таким

switchTo().frame($("[id='iframe']"));

сейчас имею вот такой вид

<iframe scrolling="no" frameborder="0" src="https://api.carvago.com/marketing/sauto/skyscraper?customId=10593210&amp;priceFormat=99000&amp;id=18534305&amp;category=&amp;manufacturer=&amp;clickthru=https://i.imedia.cz/clickthru%3FspotId%3D2796244%26section%3D/osobni/klient/renault%26collocation%3D9742%2520key6%26passon.customId%3D10593210%26passon.priceFormat%3D99000%26passon.id%3D18534305%26r%3Dc6Bgi91pFCVutBiLHWqxQC8o814-2-1%26destination%3D" width="300" height="600"></iframe>

Вот подробный код

<div class="wrapParts" style="min-height: 597px;">
<div id="skyStarter"></div>
<div id="adSkyscraper" class="adFull" style="height: 600px; width: 300px; max-width: 100%; position: absolute; top: -15px; left: 790px; bottom: auto;">
<div class="sssp-posCont" style="width: 100%; height: 100%; position:relative;">
<div class="sssp-resizeCont" data-cy="ad-content" style="width: 300px; height: 600px;">
<iframe scrolling="no" frameborder="0" src="https://api.carvago.com/marketing/sauto/skyscraper?customId=10593210&amp;priceFormat=99000&amp;id=18534305&amp;category=&amp;manufacturer=&amp;clickthru=https://i.imedia.cz/clickthru%3FspotId%3D2796244%26section%3D/osobni/klient/renault%26collocation%3D9742%2520key6%26passon.customId%3D10593210%26passon.priceFormat%3D99000%26passon.id%3D18534305%26r%3Dc6Bgi91pFCVutBiLHWqxQC8o814-2-1%26destination%3D" width="300" height="600"></iframe>

Подскажите пожалуйста как можно переключиться для работы на этот айфрейм.

Найдите этот элемент любым удобным вам локатором. Сколько ещё iframe на странице в этот момент? Если один - то вот, вы и нашли - iframe.

Три фрейма, все подобные (только ссылка у них разная) и каждый будет участвовать в тесте.

Я думал может можно как то «привязаться» к
div id=“adSkyscraper”

Да, и так можно.

В том то и просьба о помощи, не могу найти верное решение для селектора в css
В xpath понятно, но хочется именно css использовать

В итоге пришлось через XPath, хотя очень хотелось обойтись без него

switchTo().frame($x("(//*[@id='adSkyscraper']//iframe)"));

Подскажите, почему Вы так сильно хотите обойтись без XPath? Это личная нелюбовь к нему или может быть установка сверху - писать только с CSS? :slight_smile:

установок сверху не было
человек который меня в самом начале “учил” автоматическим тестам, всегда говорил “не используй XPath, это <…>”, винимо это и наложило отпечаток

Вот верный ответ

switchTo().frame($("#adSkyscraper iframe"));
1 Симпатия

Давно уже прошли те времена, когда XPath был медленнее, чем другие локаторы.
Так что не заморачивайтесь, XPath работает прекрасно. Как минимум в chrome/firefox. Другие браузеры не знаю.

2 Симпатий