Невозможно .Sendkeys со значением Date в текстовом поле ввода Angular - PullRequest
0 голосов
/ 29 октября 2019

Я пытаюсь отправить дату во входное текстовое поле приложения 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 голосов
/ 29 октября 2019

, поэтому мне пришлось объединить 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)
    }

Я не смог придумать ничего лучше, чем этот

0 голосов
/ 29 октября 2019

Вы можете попытаться установить значение input с помощью Javascript вместо SendKeys. Это служит обходным решением для многих элементов модуля JS, которые не принимают традиционные взаимодействия Selenium.

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 + "");
...