我正在通过量角器使应用程序自动化,并且作为一个测试用例的一部分,需要选择日期,日期选择器的定义如下。我试图使用sendkeys选择日期,这是行不通的。
element(by.lid("new-transaction-doat-field)).sendKeys("24 Aug 2019");
请帮助我选择日期。
注意:lid是自定义属性,要通过lid选择值,请在量角器中创建自定义属性方法
答案 0 :(得分:1)
给定代码中的两个问题:
1)应该与Input html元素进行交互
2)sendKeys()
无法与只读Input html元素进行交互。
// because protractor not support invoke setAttribute api directly,
// need to using executeScript to inject DOM Javascript snippet into browser
// then execute the snippet in browser
browser.executeScript(
"arguments[0].setAttribute('value', arguments[1])",
element(by.css( '[lid="new-transaction-doat-field"] > span > input')).getWebElement(),
"24 Aug 2019"
)
请记住,setAttribute()
并不是在模拟用户与用户界面之间的交互。
请从您的测试角度确认它是可接受的。
答案 1 :(得分:0)
您在输入中尝试过.sendKeys()
吗?
element(by.model('dateModel')).sendKeys('dd mmm yyyy');
答案 2 :(得分:0)
我找到了通过datepicker选择日期的解决方案,其中由于禁用了输入,“ sendKeys”将不起作用。解决方案就像我们手动遍历日历并选择日期一样。
代码如下:
this.selectDate = function (dateElement, dateValue, yearButton, arrowButton) {
var splitDate = dateValue.split('/');
var year = splitDate[2];
var month = splitDate[1];
var day = splitDate[0];
var monthName = getMonthName(month);
dateElement.click()
.then(() => yearButton.click())
.then(() => yearButton.click())
.then(() => selectYear(year, arrowButton))
.then(() => element(by.xpath("//span[text()='" + year + "']")).click())
.then(() => element(by.xpath("//span[text()='" + monthName + "']")).click())
.then(() => element(by.xpath("//span[text()='" + day + "']")).click());
};
async function selectYear(year, arrowButton) {
for(var i=0; i < 10; i++) {
var present = await element(by.xpath("//span[text()='" + year + "']")).isPresent()
if(present) {
break;
} else {
await arrowButton.click();
}
}
}
函数将输入作为dateElement,dateValue,yearButton(这是要遍历年份的中心按钮),arrowButton(日历中的上一个或下一个按钮)
第一个脚本单击上方图像中中心的Year按钮,即“ September 2019”,在该“ 2019”年日历到来之后,再次单击。 那么2001年到2019年的日历如下
如果显示年份,则单击该按钮,否则按日期选择“上一个”或“下一个”按钮,直到显示为止(如果没有10次单击,则循环搜索10次以搜索年份)错误)。
单击年份后,它单击月份和日期。