如何在量角器中选择日期选择器的日期

时间:2019-08-26 11:46:47

标签: protractor

我正在通过量角器使应用程序自动化,并且作为一个测试用例的一部分,需要选择日期,日期选择器的定义如下。我试图使用sendkeys选择日期,这是行不通的。 enter image description here

element(by.lid("new-transaction-doat-field)).sendKeys("24 Aug 2019");

请帮助我选择日期。

注意:lid是自定义属性,要通过lid选择值,请在量角器中创建自定义属性方法

3 个答案:

答案 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(日历中的上一个或下一个按钮)

enter image description here

第一个脚本单击上方图像中中心的Year按钮,即“ September 2019”,在该“ 2019”年日历到来之后,再次单击。 那么2001年到2019年的日历如下 enter image description here

如果显示年份,则单击该按钮,否则按日期选择“上一个”或“下一个”按钮,直到显示为止(如果没有10次单击,则循环搜索10次以搜索年份)错误)。

单击年份后,它单击月份和日期。