Примечание. Мой ответ - решение для возможности устанавливать значение в поле даты и взаимодействовать только со ссылкой отмены в объекте выбора даты.
Я боролся с этим некоторое время и подошел с решением, которое работает для меня, надеюсь, оно сработает и для вас.
Сначала, когда я проверяю объект datepicker, он генерирует случайный XPATH / CSS Selector. В результате, если вы проверите и скопируете селектор и попытаетесь использовать его в следующем тесте, он потерпит неудачу, поскольку xpath / селектор генерируется случайным образом. Я обошел эту проблему, определив уникальный css ID, который находился над элементом datepicker, и использовал его в качестве отправной точки. Затем я посмотрел на путь html от этой точки до тега ввода datepicker и добавил этот путь. Это решило первую проблему: невозможно установить значение в текстовом поле выбора даты. Вот пример использования xpath:
// * [@ id = "filtersSideBar"] - это уникальный идентификатор, находящийся над датпикером
/ div [2] / div / input - это путь к средство выбора даты с уникальным идентификатором
$('//*[@id="filtersSideBar"]/div[2]/div/input').waitForClickable(3000);
$('//*[@id="filtersSideBar"]/div[2]/div/input').setValue('2020-01-01');
Теперь, когда у вас есть дата внутри поля выбора даты, вы должны закрыть объект выбора даты. Мне пришлось использовать Javascript, чтобы достичь sh этого. Сначала откройте объект datepicker, затем проверьте элемент ссылки «Отмена». Скопируйте идентификатор селектора CSS. Допустим, это заканчивается # cancelLink
Теперь вы запускаете этот код:
browser.execute(() => document.querySelector('#cancelLink').click());
, который затем закроет объект datepicker, чтобы вы могли продолжить тестирование.
Вот мой код:
class DataSearchSortAndDateRangePage {
get startDate() { return $('//
[@id="filtersSideBar"]/div[2]/div/div[2]/div[1]/div/input'); }
setStartDate(date) {
this.startDate.waitForClickable( { timeout: browser.config.timeOutValue } );
this.startDate.setValue(date);
browser.execute(() => document.querySelector('body > div.md-datepicker-dialog.md-theme-default > div.md-datepicker-body > div.md-dialog-actions.md-datepicker-body-footer > button > div > div').click());
}
}
export default new DataSearchSortAndDateRangePage();
Надеюсь, это поможет =)