首页 > 解决方案 > 无法在 Angular 输入文本框中使用 Date 值发送键

问题描述

我正在尝试将日期发送到 Anuglar 应用程序的输入文本框。文本框只接受日期格式。我尝试将日期声明为 int 或 Date,然后在末尾添加一个空字符串,但它不起作用。.Click() 方法适用于该对象。

   int enterdate = 01012016;
   PageObjectsLocators.locate_Date_textfield(Iwebdriver).SendKeys(enterdate + "");

   DateTime iDate;
   iDate = DateAndTime.Today.AddDays(-1);
   PageObjectsLocators.locate_Date_textfield(Iwebdriver).SendKeys(iDate + "");

在这两种情况下,我都得到ElementNotInteractableException

<input type="text" id="ev_dateofevent" ng-keypress="allowDigit($event);" placeholder="MM/dd/yyyy" class="form-control ng-pristine ng-valid ng-isolate-scope ng-empty ng-valid-maxlength ng-valid-date ng-touched" uib-datepicker-popup="MM/dd/yyyy" ng-model="fieldValueObj" is-open="isOpenCalendar" maxlength="10" ng-blur="datechange(field,id,datetitle);" close-text="Close" alt-input-formats="altInputFormats" ng-disabled="datereadonly" aria-invalid="false" style="">

标签: angularseleniumprotractornunitsendkeys

解决方案


您可以尝试input使用 Javascript 而不是SendKeys. 这可以作为许多不接受传统 Selenium 交互的 JS 模块元素的解决方法。

var input = PageObjectsLocators.locate_Date_textfield(Iwebdriver);
Iwebdriver.executeScript("arguments[0].setAttribute('value', 'dateValueHere')", input);

使用 C# 而不是量角器示例更新:

// declare JS executor -- use your webdriver instance for driver
IJavaScriptExecutor js = (IJavaScriptExecutor)driver;

var input = PageObjectsLocators.locate_Date_textfield(Iwebdriver);

js.ExecuteScript("arguments[0].setAttribute('value', 'dateValueHere')", input);

如果您不喜欢 JS 方法,可以尝试的另一种替代方法是在发送键之前单击元素以使其成为焦点。

int enterdate = 01012016;

// click the input field
PageObjectsLocators.locate_Date_textfield(Iwebdriver).Click();

// send keys to the field
PageObjectsLocators.locate_Date_textfield(Iwebdriver).SendKeys(enterdate + "");

推荐阅读