Элементы не найдены после переключения в контекст iframe в TestCafe - PullRequest
0 голосов
/ 21 февраля 2019

Исходный вопрос:

с использованием

browser.switchToFrame(iframeEl);

Я могу переключиться на конкретное окно iframe, и все в порядке - щелчок по элементам и т. Д. Работает.

Но, дляпо любой причине, использование Selector, когда iframe является текущим контекстом, не работает.Я подозреваю, что это потому, что switchToFrame является методом в экземпляре браузера, и я использую функцию Selector, импортированную таким образом:

import { Selector } from 'testcafe';

Мой вопрос - хочу ли я выбрать конкретныйэлемент внутри iframe с использованием testcafe (например, для чтения его атрибутов HTML) - как мне подходить к нему?Я что-то упустил?

Более подробная информация из потока GitHub:

Более подробная информация: я создаю iframe с удаленным src, и к этому iframe я позже добавлю немного HTML, CSSи JavaScript.Я на 100% уверен, что iframe будет иметь элемент DOM, соответствующий моему запрошенному селектору, но все равно я получаю сообщение об ошибке: Cannot obtain information about the node because the specified selector does not match any node in the DOM tree.

Мой код выглядит примерно так:

const iframeEl = await Selector('a-iframe_inner[name="something"]');
    if (await iframeEl.count === 0) {
      await this.fBrowser.switchToMainWindow();
    } else {
      await this.fBrowser.switchToIframe(iframeEl);
    }

const something = await Selector('.something');

А на строке с await Selector код ломается.В других моих тестах, где я также получаю доступ к iframe и щелкаю некоторый элемент, используя await browser.click(someOtherThing);, он работает безупречно.Я также могу прочитать состояние консоли iframe без проблем.

Я подозреваю, что содержимое элемента iframe может быть еще не готово, но мне интересно, как я могу ждать, пока он не будет готов?Я попытался установить опцию timeout для вызова Selector, но это ничего не изменило.Можете ли вы поделиться какими-либо советами о том, как отложить получение селектора после перехода в контекст iframe?

Решение:

Оказалось, что это действительно ошибка с моей стороны.Сожалею.Для будущих поколений: переключение Iframe и использование селекторов должно работать нормально, по крайней мере, в TestCafe v0.20.1.Просто убедитесь, что ваши селекторы совпадают, и вы действительно находитесь в контексте iframe, а не просто думаете, что вы там

1 Ответ

0 голосов
/ 22 февраля 2019

Нет необходимости делать что-то особенное, чтобы Selectors работал в фреймах.Это должно работать как ожидалось.Если они не хотят создавать отчет об ошибках в официальном репозитории, используя эту форму , я был бы признателен, если бы вы предоставили пример, демонстрирующий проблему.Что касается вашего вопроса, я не смог воспроизвести эту проблему на простом примере.Тестовая страница:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<h1>Click me</h1>

<iframe id="frame" src="http://example.com" style="width: 500px; height: 500px;"></iframe>

</body>
</html>

Тестовый код:

import { Selector } from 'testcafe';

fixture `Selector in iframe`
    .page `../pages/index.html`;

const selector = Selector('h1');

test('test', async t => {
    await t.click(selector);

    console.log(await selector.innerText);

    await t.switchToIframe('#frame');

    await t.click(selector);

    console.log(await selector.innerText);
});

Все клики работают, как и ожидалось, и я смог успешно получить innerText из Selector.Кроме того, я бы порекомендовал вам проверить, какой элемент действительно существует на странице, что Selector относится к существующему элементу и что его ширина и высота больше нуля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...