我有一个场景,我必须自动完成一个充满了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>
任何人都可以帮我解决这个问题吗?
非常感谢您的帮助。
答案 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");
希望它可以节省一些人的时间