在Angular输入文本框中无法使用带有日期值的.Sendkeys

时间:2019-10-29 16:09:02

标签: angular selenium protractor nunit sendkeys

我正在尝试将日期发送到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="">

2 个答案:

答案 0 :(得分:0)

您可以尝试使用Javascript而非input设置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 + "");

答案 1 :(得分:0)

所以我不得不在1个框架下组合14个应用程序,并测试要在winodws / mac / linux中执行。因此,唯一可以在所有平台/应用程序之间正确发送密钥的方法是以下丑陋的代码:

sendKeys: async ($element, keyCode = "") => {

        await $element.clear();
        await $element.click();
        await $element.sendKeys("X");
        await $element.sendKeys(protractor.Key.BACK_SPACE);

        let value = await $element.getAttribute("value");
        for (let i = 0; i < value.length; i++) {
            await $element.sendKeys(protractor.Key.BACK_SPACE);
        }
        await $element.sendKeys(keyCode)
    }

我无法提出比这更好的东西