Выберите опцию в элементе управления HTML DataList с помощью Selenium - PullRequest
0 голосов
/ 23 октября 2019

Я использую vue.js, чтобы выбрать опцию из списка данных.

Любая идея, как я могу выбрать из списка опций, используя Selenium?

Я могу ввести в поле ввода и выборсписок показывает вверх. Но события ArrowDown, которые я отправляю в поле ввода, не приводят к выбору.

Когда на входе указывается точное совпадение, принимается значение этого уникального параметра, но если я использую частичное совпадение и япопробуйте выбрать опцию, я не могу перейти к нужной мне опции. Похоже, список опций находится не в фокусе, и отправка ArrowDown enevt на вход не приводит к выбору опций. Я попытался отложить ключевое событие, думая, что список опций требует времени для рендеринга и стать интерактивным, я также попытался объединить несколько событий ArrowDown и Enter. Ничего не работает.

Это мой шаблон vue.js:

<datalist id="allUsers">
    <option v-for="user in $parent.users" :label="user.fullName + ' (' + user.email + ')' " :value="user.email">{{user.fullName}} - {{user.email}}</option>
</datalist>
<input class="form-control" name="UserEmail" type="email" list="allUsers" id="selectedEmail" v-on:change="updateEmail($event.target.value)" :value="selectedEmail">

Вот что я вижу в браузере (HTML):

<datalist id="allUsers">
    <option label="UserA (a@mailinator.com)" value="a@mailinator.com">UserA - a@mailinator.com</option>
    <option label="UserB (b@mailinator.com)" value="b@mailinator.com">UserB - b@mailinator.com</option>
</datalist>
<input name="User" type="text" list="allUsers" id="selectedEmail" class="form-control">

С селеном яУспешно отфильтровать параметры:

IWebElement uiElement = null;
uiElement = driver.FindElement(By.Id("selectedOption"));
uiElement.Clear();
uiElement.SendKeys("UserA");
Thread.Sleep(500);

Пока все в порядке. Раскрывающийся список содержит только мой вариант. Но из-за привязки он не выбран. Я ожидал, что этот код будет работать, но он не дает мне список отображаемых параметров.

var optionsElements = uiElement.FindElements(By.TagName("option"));
TestContext.Log(TestContext.LoggingAbstractionType.SeleniumInterface, "Have " + optionsElements.Count + " options!");
if(optionsElements.Count > 0)
{
    optionsElements[0].Click();
}
...