Моя тестируемая система представляет собой веб-сайт, который динамически создает страницы из файла конфигурации и индексную страницу с интерактивными значками для этих страниц. До сих пор я не мог найти способ перебирать значки на странице индекса и тестировать все связанные страницы.
it('lets us test all the pages', () =>
actorCalled('Jasmine').attemptsTo(
Loop.over(EntryPage.SynthLinks).to(
Ensure.that(Loop.item<ElementFinder>(), isClickable()),
Click.on(Loop.item<ElementFinder>()),
Wait.for(Duration.ofSeconds(10)),
Log.the(Website.title()),
//Navigate.back(),
),
));
Этот цикл работает до тех пор, пока он показывает мне все страницы в Chrome, но зарегистрированный заголовок веб-сайта всегда совпадает с заголовком страницы индекса, поэтому я не могу выполнить какое-либо тестирование на страницах, на которые нажали. (Комментарий Navigate.back()
также нарушает тест .)
Я попытался прочитать URL-адрес страниц, на которые нажали, из Loop.item<ElementFinder>()
, чтобы вместо этого использовать Navigate.To()
, но я не смог найти никакого метода для этого.
Хорошо, я узнал это. Виновником был тестируемый веб-сайт, он использовал не href для ссылки, а немного кода js:
[...]
var Subwindows = [];
function openSub(name) {
var neighbour = window.open(name);
Subwindows.push(neighbour);
}
[...]
<a onclick = "openSub('../SynthPage.html?Mdl=access+virus+b')"><img src = "../images/virus.jpg" class = "icon" alt = "access virus b"></a>
Идея состоит в том, чтобы запомнить открытые страницы и закрыть их, когда закончите. Таким образом, хороший Chrome добросовестно выполнил js и показал мне открытую страницу (в отдельной вкладке), но в центре внимания теста по-прежнему была исходная страница. Надо будет придумать, как это проверить || :-)
Спасибо, я нашел это уже в документе. Это решило мою проблему.
Serenity/JS теперь предоставляет новые взаимодействия для переключения на другое окно фрейма и закрытия вкладок/окон, которые могут оказаться полезными в этом сценарии.