(Автоматизация тестирования MS Dynamics) Невозможно переключиться в iframe, кадры меняются автоматически - PullRequest
0 голосов
/ 27 июня 2018

Я пытаюсь переключать кадры в системе MS Dynamics 365 с помощью Selenium WebDriver. Я объясню один из вопросов ниже. Вот код HTML-элемента: код элемента здесь

Обычно я использовал id = contentIFrame0 или 1, и кадры переключались нормально. Проблема в том, что MS Dynamics генерирует эти iframes динамически, обычно содержит не более 3 iframes (contentIFrame0, contentIFrame1, contentIFrame2), но дело в том, что вы никогда не знаете, что они будут 2 или 1 на странице и почему, поэтому, если вы используете сегодня один из них напрямую - завтра ваши тесты не пройдут из-за изменений. Кажется, мне приходится все время переключаться на последний кадр, но он работает случайным образом, потому что иногда первый элемент содержит элемент, а другой - сценарии. Другая вещь, которую я пытался сделать, это переключиться на один iframe, который имеет атрибуты: style = visibility: visible (до этого я пытался вывести в консоли, сколько видимых кадров видит драйвер - но записывается все время 0). Кроме того, если я попытаюсь напечатать в консоли, сколько фреймов на странице - счетчик равен 2, но я вижу 3.

Если есть кто-нибудь, кто пытался автоматизировать MS Dynamics 365 и имел такую ​​же проблему? Я описал, наверное, все случаи, может быть, вы заметите логику и разницу.

Ответы [ 3 ]

0 голосов
/ 27 июня 2018

Очень сложно протестировать таким способом, поскольку Microsoft не гарантирует, что отображаемые объекты останутся прежними. Сегодня может быть 3 кадра, но в следующей версии команда разработчиков может представить более или менее, работа с DOM напрямую больше не поддерживается.

Я бы настоятельно рекомендовал следующие рамки для тестирования Dynamics: https://github.com/Microsoft/EasyRepro

Это поможет поднять ваше тестирование на один уровень, он вводит уровень абстракции, чтобы минимизировать необходимость работать с HTML напрямую, изолируя всю эту низкоуровневую работу в коде фреймворка.

Вот отличный пост про EasyRepro: http://www.itaintboring.com/dynamics-crm/easy-repro-what-is-it/

Гудлак

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

Этот xpath надежно находит основную панель

//iframe[contains(contains(@id,'contentIFrame') and contains(@style,'visible')]

Примечание: не относится к унифицированному интерфейсу Dynamics 365. Он имеет совершенно другой DOM.

0 голосов
/ 27 июня 2018

Я не уверен, работает ли это в вашем случае, но, пожалуйста, попробуйте.

Если вам известен один из элементов в кадре, который вы пытаетесь переключить, используйте селектор css или xpath

driver.switchTo().frame(driver.findElement(By.cssSelector("iframe[title='test']")));
...