2017-02-03 4 views
0

Я пытаюсь написать тест с Selenium, который выбирает элемент из двух выпадающих меню, а затем нажимает кнопку. Проблема, с которой я сталкиваюсь, заключается в том, что второе раскрывающееся меню заполняется вызовом angularjs в зависимости от элемента, выбранного из первого раскрывающегося списка. По какой-то причине угловой вызов никогда не запускается, а второй список никогда не заполняется и вызывает ошибку. Почему вызов angularjs не выполняется при изменении значения?Выбор пункта из выпадающего меню не запускает функцию angularjs с использованием Selenium

Образец выпадающего списка:

<select id="itemList" style="width:495px;" onchange="angular.element($(this)).scope().itemChanged(this);"> 
    <option value="item1">Item 1</option> 
    <option value="item2">Item 2</option> 
    <option value="item3">Item 3</option> 
</select> 

код Селен:

SelectElement item = new SelectElement(driver.FindElement(By.Id("itemList"))); 
item.SelectByText("Item 2"); 

Это правильно выбирает элемент из первого выпадающего списка, но по какой-то причине угловой вызов не выполняется для заполнения второй падать; как я могу запустить этот вызов?

ответ

0

Я смог решить это, вручную вызвав событие onchange(), которое вызвало вызов угловой функции после заполнения первого выпадающего списка.

IJavaScriptExecutor jse = (IJavaScriptExecutor)driver; 
jse.ExecuteScript("$(arguments[0]).change();", driver.FindElement(By.Id("itemList"))); 
0

Вы не можете заставить этот триггер использовать селен, если он не срабатывает, как и должно быть (после нажатия, выбора или любого другого). Вы можете заставить его использовать javascript. Но я бы порекомендовал вас попробовать с click() вместо select.

+0

Я также попытался получить все варианты и щелкнуть по правильной опции 'option.Click();', но результат, похоже, тот же. Если значение выбрано правильно, но эта функция не выполняется. – Justin

Смежные вопросы