0

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

如果我在月份字段上单击鼠标,则该控件在正常情况下似乎可以正常工作,光标将显示在那里,如果我键入 2 个字符,再输入 2/个字符,/然后最后 4 个字符,控件工作正常。硒选择控件和 DatePickers 默认行为似乎只是一个问题。

由于可访问性处理允许,我尝试使用browser.Key.LEFT_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}`
      );

任何建议表示赞赏。

4

1 回答 1

0

虽然不完美,但我想出了一个解决方案,所以希望它可以帮助其他一些人。

该方法最终与我上面提出的方法大致相似,但在每次操作之间留出了更多时间。我将它添加到一个 util 函数中,该函数接受选择器来定位输入控件以及用于填充控件的月/日/年。有可能时间间隔可以减少到小于 500 毫秒,但没有比 1000 毫秒(有效)和 100 毫秒(工作不一致)更好的更详尽的测试。

见下文:

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);
};
于 2020-10-05T21:20:08.080 回答