使用selenium自动化kendoUI数字文本框,无需javascript

时间:2017-02-07 10:16:32

标签: selenium-webdriver kendo-ui

我有一个场景,我必须自动完成一个充满了kendoUI数字文本框的页面。

我能够使用xpath or id selector找到元素,但是当selenium尝试在所述文本框中输入值时,它会收到例外情况:

  

ElementNotVisibleException =>当试图点击上述元素时。

     

InvalidElementStateException =>当试图使用输入值时   的SendKeys

我正在寻找一种可以在不使用ExecuteJavascript interface的情况下自动执行此任务的解决方案。

以下是其中一个文本框的示例html

<div class="form-group">
    <label for="sheet_width">Page Width<span class="ep-required-label" ng-show="sheet_maintenance_form.sheet_width.$error.required" aria-hidden="false" style="">*</span>
    </label>
    <span class="k-widget k-numerictextbox ng-dirty ng-valid-parse ng-touched ng-empty ng-invalid ng-invalid-required">
        <span class="k-numeric-wrap k-state-default">
            <input type="text" class="k-formatted-value ng-pristine ng-untouched ng-valid k-input" title="" tabindex="0" role="spinbutton" aria-valuemin="0" aria-valuemax="999.999" aria-disabled="false" style="display: inline-block;">
            <input ng-required="true" kendo-numeric-text-box="sheet_width" k-options="sheet_edit_controller.sheet_field_options" ng-model="sheet_edit_controller.sheet_config.sheet_width" name="sheet_width" id="sheet_width" class="k-input ng-dirty ng-valid-parse ng-touched ng-empty ng-invalid ng-invalid-required" data-role="numerictextbox" role="spinbutton" type="text" aria-valuemin="0" aria-valuemax="999.999" aria-disabled="false" required="required" aria-invalid="true" style="display: none;">
            <span class="k-select">
                <span unselectable="on" class="k-link k-link-increase" aria-label="Increase value" title="Increase value">
                    <span unselectable="on" class="k-icon k-i-arrow-60-up"/>
                </span>
                <span unselectable="on" class="k-link k-link-decrease" aria-label="Decrease value" title="Decrease value">
                    <span unselectable="on" class="k-icon k-i-arrow-60-down"/>
                </span>
            </span>
        </span>
    </span>
</div>

任何人都可以帮我解决这个问题吗?

非常感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

这对我有用,可以将框中的值增加1,但我感谢任何其他建议:

Actions actions = new Actions(Browser);
actions.MoveToElement(
Container.FindElement(By.CssSelector("span.k-i-arrow-n"))).Click().Perform()

答案 1 :(得分:1)

对于在墙上撞到头的任何人,这就是我在我这边解决的方式。

Kendo将一个数字文本框转换为2个文本框,只有第二个具有您设置的ID,您不能直接进入它,因为它不可见,因此在我的属性声明中,我有以下内容

[FindsBy(How = How.Id, Using = "MyNumberField")]
private IWebElement myRealNumberField;
[FindsBy(How = How.XPath, Using = "(.//*[@id='MyNumberField']/preceding::input[1])")]
private IWebElement myNumberField;

然后在代码中

myNumberField.Click(); //This then causes the real number field to appear
myRealNumberField.Click();
myRealNumberField.SendKeys("Stackoverflow Example");

希望它可以节省一些人的时间