Есть такая штука как Telerik Kendo, и есть у них такой контроль не обычный как combobox.
Возникла проблемка как реализовать на него select и как получить список всех опций этого combobox.
Кто то работал с ним?
Вот кстати он сам, если кто захочет помочь: Demo of core features in jQuery ComboBox widget | Kendo UI for jQuery
может поможет:
О, классная ссылка. Как раз искал полезный материал по использованию JS в Селениум.
JS к сожалению пока что не знаю.
Если есть у кого еще подобные примеры на JS, буду рад.
А зачем тут js и jQuery? Вполне себе нормальный контрол с адекватными локаторами. В чем сложность то?
Глянул мельком. Проще всего, на мой взгляд, с этим контролом работать как с текстовым полем - он позволяет вводить текст. Если нет задачи тестировать сам контрол, а только вводить с его помощью инфу в страницу, то я бы так и делал, чтоб не заморачиваться с этими раскрывашками/закрывашками/всплывашками
Насколько я помню, там проблема возникала тогда, когда мы не знаем какие значения есть внутри.
в этом случае я выбирал значение через JS по номеру
вот пример:
public void setExistingValue(String itemNumber){
executeJavaScript("var q=$('#"+selectId+"').data('kendoDropDownList');" +
" q.select("+itemNumber+");" +
" q.trigger('change');");
}
если же мы знаем значение, которое там есть - то можно действительно просто ввести текст.
public void setValue(String value){
Element.sendKeys(value);
}
PS: до получения списка всех значений так и не дошел, но думаю что это можно сделать через JS, либо же писать метод который сначала кликает по элементу а потом возвращает список найденных значений.
PPS: пример приведен для контрола DropDownList, но думаю он очень схож с ComboBox
Выпадающий список в нем является отдельным элементом. Можно Получить List<WebElement>
li в нем и выбрать необходимый по номеру в листе. Находятся они по порядку.
Взгляни на его код.
Да, думал о таком. Просто хочется расширить свои знания и научиться обрабатывать такие контроли как следует. Селект еще ладно реализовать, а вот список эллементов хотелось бы по элегантнее.
Вы думаете я не смотрел?
А когда-то давно и имплементил - все там “ровно”. Конечно коробочный Select не подойдет - но это же вполне очевидно. Но все-равно цель топика непонятна - у вас сложности с локаторами или с чем-нибудь еще?
Поддерживаю всех сказавших, что JS тут и в помине не нужен. Если автор знаком с ООП, то сделать кастомный селект для этого контрола - задача очень простая. Причем, как уже сказали выше, существует достаточно способов имплементации, будь то работа с простым инпутом, либо моделирование реальных действий юзера с открытием / закрытием списка. К использованию JS надо прибегать в самую последнюю очередь. Конечный юзер то не лезет в консоль, чтобы заэкзекьютить скрипт для выбора эелемента дропдауна, ведь так?
Решено.
Так как я использую VIQA, я создал дополнительный класс наследуемый от DropBox.
Может кому пригодится:
public class KendoComboBox: DropDown
{
public ITextField InputTextField { get; set; }
public KendoComboBox(string name, By rootCssSelector, By selectorTemplate, By textFieldLocator)
: base(name, rootCssSelector, () => new SelectItem("", selectorTemplate))
{
SetProperties(textFieldLocator);
}
public KendoComboBox(string name, By rootCssSelector, Func<SelectItem> selectorTemplate, By textFieldLocator) : base(name, rootCssSelector, selectorTemplate)
{
SetProperties(textFieldLocator);
}
private void SetProperties(By textFieldLocator)
{
InputTextField = new TextField(textFieldLocator);
base.SelectAction = (selector, option) =>
{
selector.GetWebElement().Click();
Thread.Sleep(300);
selector.GetVIElementByName(option).Click();
};
base.IsSelectedFunc = (selector, option) => option == InputTextField.Value ? true : false;
}
public override string Value { get { return InputTextField.Value; } }
}