C # с Selenium Ajax DropdownList Вопрос - PullRequest
3 голосов
/ 21 июля 2009

У меня есть два раскрывающихся списка, один из которых содержит список стран, а другой - для штатов / регионов, которые не заполняются, пока не будет выбрана одна из стран. Оба эти раскрывающихся списка находятся в панели обновления. Когда я выбираю США, раскрывающийся список штатов заполняется 50 штатами, и я могу двигаться дальше.

Мы используем Selenium для запуска тестов этого кода, и тесты всегда прерываются, когда он достигает раскрывающегося состояния. Генерация списка состояний либо занимает слишком много времени, либо, возможно, он просто не может найти значения, поскольку они не находятся в исходном html, который отображается. Я видел кое-что о поле javascript «WaitForCondition», но не могу найти подробностей о том, как использовать это в документации по селену. Я не сутулый JavaScript, но и не лучший из них. Может ли кто-нибудь объяснить мне, как вы можете решить мою дилемму, и если для этого потребуется знание поля WaitForCondition, вы можете объяснить мне, как я могу заставить это работать?

Для справки, я видел этот пост: (нажмите здесь, чтобы получить полезный пост stackoverflow) , но я не понимаю, как связать его с моей ситуацией Заранее спасибо за все, что ты можешь мне дать.

Ответы [ 3 ]

4 голосов
/ 22 июля 2009

Вы используете Selenium IDE? Это позволяет очень легко написать свой код и затем экспортировать его на язык, который вы используете с Selenium RC.

В Selenium IDE вы найдете метод с именем "waitForText". Этот метод принимает локатор элемента в качестве аргумента и строку в качестве значения. Ваш локатор будет идентификатором раскрывающегося списка состояний (или селектором css, если он имеет динамический идентификатор). В качестве значения используйте что-то, что присутствует в раскрывающемся списке, только после его загрузки (последний штат США в списке, вероятно, является лучшим выбором).

Дайте мне знать, если вам нужны какие-либо разъяснения или дополнительные детали.

С уважением, Mark

2 голосов
/ 23 июля 2009

Оказывается, я нашел решение своей проблемы.

Я использовал следующую строку в моих тестах 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 = selenium.browserbot.getCurrentWindow (). Document.getElementById ('insert-id-of-dropdownlist-here'); ddl.options [ddl.selectedIndex] .text == 'вставить текстовое значение для поиска в раскрывающемся списке';

Значение : 10000

Это страница, которая в конечном итоге помогла мне найти решение: http://wiki.openqa.org/display/SEL/waitForCondition

1 голос
/ 23 июля 2009

Извините, мне было сложно протестировать мой код, не имея реальной страницы передо мной. Проблема может заключаться в том, что каждое состояние является элементом 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);
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...