C# с вопросом выпадающего списка Selenium Ajax
У меня есть два выпадающих списка, один из которых содержит список стран, а другой-для Штатов/регионов, которые не заполнены, пока не выбрана одна из стран. Оба этих выпадающих списка обернуты в панель обновления. Когда я выбираю США, выпадающий список штатов заполняется 50 Штатами, и я могу двигаться вперед оттуда.
Мы используем Selenium для выполнения тестов этого кода, и тесты всегда прерываются, когда он достигает выпадающего списка состояния. Это либо занимает слишком много времени, чтобы генерировать список состояний, или, возможно, он просто не может найти значения, так как они не находятся в исходном html, который отображается. Я видел некоторые вещи о поле javascript "WaitForCondition", но не могу найти никаких подробностей о том, как это использовать в документации selenium. Я не сутулый javascript, но и не самый большой с ним. Может ли кто-нибудь объяснить мне, как вы могли бы решить мою дилемму, и если это потребует знания о том, как поле WaitForCondition, вы можете объяснить мне, как я может ли это сработать?
Для записи, я видел этот пост: (Нажмите здесь для полуполезного сообщения stackoverflow), но я не понимаю, как соотнести его с моей собственной ситуацией. Заранее благодарю за все, что вы можете мне дать.
3 ответов:
Вы используете Selenium IDE? Это позволяет очень легко написать код, а затем экспортировать его на язык, который вы используете с Selenium RC.
В Selenium IDE вы найдете метод под названием "waitForText". Этот метод принимает локатор элемента в качестве аргумента и строку в качестве значения. Ваш локатор будет идентификатором выпадающего списка состояния (или селектором css, если он имеет динамический идентификатор). Для значения используйте то, что присутствует в выпадающем списке только после его загрузки (последний US государство в списке, вероятно, лучший выбор).
Дайте мне знать, если вам потребуются какие-либо разъяснения или дополнительные детали.
С уважением, Марк
Получается, что я нашел решение своей собственной проблемы.
Я использовал следующую строку в моих тестах C#, и она мгновенно находит значение в моем выпадающем списке:
selenium.WaitForCondition("var ddl = selenium.browserbot.getCurrentWindow().document.getElementById('insert-id-of-dropdownlist-here'); ddl.options[ddl.selectedIndex].text == 'insert-text-value-to-search-for-in-dropdown-here';", "10000");В IDE я использовал следующие параметры:
Команда : waitForCondition
Цель : var ddl = селен.браузербот.getCurrentWindow ().документ.getElementById ('insert-id-of-dropdownlist-here'); ddl.варианты[ddl.selectedIndex].текст == 'вставить-текст-значение-для-поиска-в-выпадающем списке-здесь';
Значение: 10000
Это страница, которая в конечном итоге помогла мне найти решение.: http://wiki.openqa.org/display/SEL/waitForCondition
Извините, было трудно протестировать мой код, не имея перед собой реальной страницы. Проблема может заключаться в том, что каждое состояние является элементом
optionпод элементомselect(или, возможно, вы используете JavaScript-фреймворк, который обрабатывает это по-разному?). Если у вас есть элементыoption, Вы можете использовать это:waitForElementPresent | css=option:contains('someState')Который экспортирует как:
for (int second = 0;; second++) { if (second >= 60) Assert.Fail("timeout"); try { if (selenium.IsElementPresent("css=option:contains('someState')")) break; } catch (Exception) {} Thread.Sleep(1000); }
Comments