剑道日期选择器上的Selenium(nightwatch)设置值不工作

剑道日期选择器上的Selenium(nightwatch)设置值不工作,selenium,kendo-datepicker,nightwatch,kendo-react-ui,Selenium,Kendo Datepicker,Nightwatch,Kendo React Ui,我正在尝试使用nightwatchsetValue将格式为mm/dd/yyyy的日期字符串输入到剑道反应日期选择器控件中。似乎无论我采取什么方法来选择控件,它总是首先将光标设置在年份部分,然后键入,然后只填充这四个字符。 (例如,如果我提供'05/06/2016',我看到输入中键入的所有内容都是'mm/dd/0016',并且月和日从不更新。) 在正常情况下,如果我用鼠标单击月字段,光标将显示在那里,如果我键入2个字符,一个/2个字符,另一个/,然后最后4个字符,控件将正常工作。selenium选

我正在尝试使用nightwatch
setValue
将格式为
mm/dd/yyyy
的日期字符串输入到剑道反应日期选择器控件中。似乎无论我采取什么方法来选择控件,它总是首先将光标设置在年份部分,然后键入,然后只填充这四个字符。 (例如,如果我提供'05/06/2016',我看到输入中键入的所有内容都是'mm/dd/0016',并且月和日从不更新。)

在正常情况下,如果我用鼠标单击月字段,光标将显示在那里,如果我键入2个字符,一个
/
2个字符,另一个
/
,然后最后4个字符,控件将正常工作。selenium选择控件和日期选择器的默认行为似乎是个问题

我尝试使用
browser.Key.LEFT\u ARROW
查看是否可以先向左移动光标两次,因为辅助功能处理允许向左移动光标。我还尝试先对输入调用
clearValue()
,然后从头开始键入,但在这两种情况下都没有成功

如果可以避免的话,我宁愿不使用日历控件选择日期

以下是我的代码当前的样子:

const consumerInfo = {
      birthMonth: "05",
      birthDay: "06",
      birthYear: "2016",
      birthDate: "05/06/2016",
    };

const datePickerSelector = '.myDatePicker';
const datePickerInputSelector = '.myDatePicker .k-input';

browser.waitForElementVisible(datePickerSelector, DEFAULT_WAIT_TIME)
      .waitForElementVisible(datePickerInputSelector, DEFAULT_WAIT_TIME)
      .setValue('.myDatePicker .k-input, [
        consumerInfo.birthYear,
        browser.Keys.LEFT_ARROW,
        consumerInfo.birthDay,
        browser.Keys.LEFT_ARROW,
        consumerInfo.birthMonth,
      ])
      .assert.value(
        datePickerInputSelector,
        consumerInfo.birthDate,
        `Birthdate is set to ${consumerInfo.birthDate}`
      );

非常感谢您的任何建议。

虽然不完美,但我提出了一个解决方案,希望它能帮助其他人

该方法与我上面提出的方法大致相似,但允许在每次操作之间留出更多的时间。我将其添加到一个util函数中,该函数接受选择器,以输入控件为目标,并使用月/日/年填充控件。有可能在某些地方将时间间隔缩短到500ms以下,但没有比1000ms(有效)和100ms(不一致)更好的测试

见下文:

const toDatePickerInsertion = (browser, pickerInputSelector) => ({
  month,
  day,
  year,
}) => {
  return browser
    .click(pickerInputSelector)
    .pause(500)
    .keys(browser.Keys.LEFT_ARROW)
    .pause(500)
    .keys(browser.Keys.LEFT_ARROW)
    .pause(500)
    .keys(month)
    .pause(500)
    .keys(browser.Keys.RIGHT_ARROW)
    .pause(500)
    .keys(day)
    .pause(500)
    .keys(browser.Keys.RIGHT_ARROW)
    .pause(500)
    .keys(year);
};