Как выбрать значение из раскрывающегося списка Kendo UI MVVM в автоматическом тесте?

Может ли кто-нибудь помочь мне с выбором значения из раскрывающегося списка Kendo UI MVVM с использованием Selenium Java?

<input class="k-input fieldFullWidth" autocomplete="off" style="width: 100%;" title="" role="combobox" aria-expanded="false" tabindex="0" aria-disabled="false" aria-autocomplete="both" aria-owns="ddStore_listbox" type="text">

<input id="ddStore" class="fieldFullWidth" data-role="combobox" style="display: none;" aria-disabled="false" data-bind="value: selectedAsset.StoreID, comboboxText: selectedAsset.StoreName">

Я пытался использовать JavascriptExecutor. Но это дает мне org.openqa.selenium.WebDriverException: неизвестная ошибка: невозможно установить значение свойства нулевой ошибки.

jse.executeScript("document.getElementById('ddstore').value = '1';");

Спасибо


person B.Tang    schedule 22.12.2016    source источник
comment
Вы имеете в виду тег javascript? а не джава   -  person Felipe Lopez    schedule 22.12.2016
comment
Извини. Я забыл упомянуть. Я использую Selenium Java для автоматического тестирования   -  person B.Tang    schedule 22.12.2016
comment
Я думаю, что это поле со списком, пожалуйста, добавьте изображение пользовательского интерфейса.   -  person NarendraR    schedule 22.12.2016
comment
Изображение пользовательского интерфейса: screencast.com/t/8Zj7fYgDks   -  person B.Tang    schedule 22.12.2016


Ответы (2)


Используйте ExplicitWait, чтобы дождаться появления элемента <input>tag, а затем отправьте раскрывающееся значение в качестве входных данных.

WebDriverWait wait = new WebDriverWait(driver, 120);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("ddStore")));

driver.findElement(By.id("ddStore")).sendKeys("dropDown_Value"); // send your dropdown value as input

`

Другой альтернативный способ - использовать JavascriptExecuter, поскольку ваш тег содержит атрибут style="display: none;", поэтому могут быть изменения невидимости элемента.

 JavascriptExecutor jse = (JavascriptExecutor)driver;
 jse.executeScript("arguments[0].value='your_dropdown_value';",driver.findElement(By.id("ddStore")));
person NarendraR    schedule 22.12.2016
comment
Нет, это не работает. Это дает мне следующую ошибку org.openqa.selenium.TimeoutException: истекло время ожидания через 120 секунд ожидания видимости элемента, расположенного по By.id: ddStore - person B.Tang; 22.12.2016
comment
Хорошо, попробуйте это, если вы хотите сделать это, используя JavaScriptExecuter - jse.executeScript("arguments[0].value='your_dropdown';", driver.findElement(By.id("ddStore"))); - person NarendraR; 22.12.2016
comment
В консоли ошибок нет. Но в раскрывающемся списке также нельзя ввести значение - screencast.com/t/N15vzoTub - person B.Tang; 23.12.2016
comment
Я не знаю, почему это вызывает проблемы на вашем конце. вы можете попробовать добавить паузу до и после этого утверждения, например Thread.sleep(3000) - person NarendraR; 23.12.2016

Вы можете попробовать следующий код, чтобы выбрать раскрывающееся значение:

Select mydrpdwn = new Select(driver.findElement(By.id("ddStore"))); //id of dropdown  
mydrpdwn.selectByVisibleText("name");// Value you wanted to select
person Maninder    schedule 29.12.2016