комбинированный ящик кендо с селеном Java - PullRequest
1 голос
/ 30 октября 2019

Я пытаюсь автоматизировать приложение пользовательского интерфейса Kendro с помощью селена. Я не уверен, является ли селен подходящим инструментом для приложения Kendro UI.

Не могли бы вы помочь мне выбрать выпадающее значение Kendro UI Combobox с селеном.

Я пробовал несколькоспособы, и ни один из них не работал до сих пор.

Мой код: Я нажал на стрелку из выпадающего списка и подождал несколько секунд, а затем попытался выбрать значение. Но проблема в том, что по какой-то причине выпадающий список работает 4 из 10 раз. Так что это неправильное решение

WebElement firstDropDown = driver.findElement(By.xpath("//innova-combobox-input[@name='LHSCID']//span[@class='k-select']"));

firstDropDown.click();
new WebDriverWait(driver,50).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//span[contains(text(),'LHSC 1000 Technician Site A')]")))

driver.findElement(By.xpath("//span[contains(text(),'LHSC 1000 Technician Site A')]")).isDisplayed();
driver.findElement(By.xpath("//span[contains(text(),'LHSC 1000 Technician Site A')]")).click();

Ниже приведен HTML-код на странице для раскрывающегося списка:

<input name="{{::$ctrl.name}}_input" class="k-input innova-invalid" type="text" autocomplete="off" title="" role="combobox" aria-expanded="false" style="" tabindex="0" aria-disabled="false" aria-autocomplete="list" aria-owns="" aria-busy="false" aria-activedescendant="d5147cf1-35ff-4160-ad0f-c164916f59c7" xpath="1">

И значения раскрывающегося списка

<ul unselectable="on" class="k-list k-reset" tabindex="-1" aria-hidden="true" aria-live="polite" data-role="staticlist" role="listbox" style="" xpath="1">
<li tabindex="-1" role="option" unselectable="on" class="k-item k-state-focused" data-offset-index="0" id="d5147cf1-35ff-4160-ad0f-c164916f59c7" style=""></li>
<li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="1">
<span ng-bind="dataItem.Display"></span>
</li>
<li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="2" style=""></li>
<li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="3"></li>
<li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="4"></li>
<li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="5"></li>
<li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="6"></li>
<li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="7"></li>
<li tabindex="-1" role="option" unselectable="on" class="k-item" data-offset-index="8"></li>
</ul>

1 Ответ

0 голосов
/ 01 ноября 2019

Вы правы. Поскольку это сложное приложение, мы можем попытаться решить его несколькими способами.

Довольно простой способ попробовать - это просто clearKeys.

WebElement firstDropDown = driver.findElement(By.xpath("(//*[text() = 'T-shirt Fabric']//following::input)[1]"));
firstDropDown.click();
firstDropDown.clear();
firstDropDown.sendKeys("Cotton");

Если вы получаете StaleElementException, попробуйте использоватьfindElement в каждой строке.

driver.findElement(By.xpath("(//*[text() = 'T-shirt Fabric']//following::input)[1]")).click();
driver.findElement(By.xpath("(//*[text() = 'T-shirt Fabric']//following::input)[1]")).clear();
driver.findElement(By.xpath("(//*[text() = 'T-shirt Fabric']//following::input)[1]")).sendKeys("Cotton");

Если эта опция не работает в вашем приложении, попробуйте использовать класс Actions.

Actions action = new Actions(driver);
WebElement firstDropDown = driver.findElement(By.xpath("(//*[text() = 'T-shirt Fabric']//following::input)[1]"));
action.moveToElement(firstDropDown).click().build().perform(); 
action.sendKeys(Keys.ARROW_RIGHT).sendKeys(Keys.BACK_SPACE).sendKeys(Keys.BACK_SPACE).release().build().perform();
action.sendKeys("Cotton").build().perform();
action.sendKeys(Keys.TAB).build().perform();

Вероятно, вы можете превратить это в метод и использовать его для каждоговыпадающий как это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...