使用Protractor element.all,如何在日历元素上选择一天

时间:2016-10-17 16:02:31

标签: protractor e2e-testing

angular-ui datepicker(https://angular-ui.github.io/bootstrap/#/datepicker)是我在量角器e2e测试中选择的组件。

我可以按如下方式打开日历(效果很好):

this.calendarClick = function () {
    var sel = '.calendar .glyphicon-calendar';        
    return element(by.css(sel)).click();
};

但是,我还想在日历上选择特定日期。

使用jQuery,我可以轻松选择日历中的所有跨度:

$('[ng-click="select(dt.date)"] > span')

返回类似数组的对象:



  
0:span.ng-binding.text-muted
1:span.ng-binding.text-muted
2:span.ng-binding.text-muted
3:span.ng-binding.text-muted




我也可以使用jQuery来选择" 01"在日历上:

$('[ng-click="select(dt.date)"] > span:contains("01")')

      [span.ng-binding, span.ng-binding.text-muted]  

但是使用Protractor,如何在日历上选择特定的日元素?

我正在考虑这样的事情,只需点击第一天元素:

element.all(by.css('[ng-click="select(dt.date)"] > span')).then(function (el) {
      console.log(el[0]);                            
      el.first().click();
 });

但它引发了错误:

   TypeError: el.first is not a function

建议表示赞赏......

的问候, 鲍勃

2 个答案:

答案 0 :(得分:2)

使用定位器by.cssContainingText获取包含文本“01”的元素:

element(by.cssContainingText('[ng-click="select(dt.date)"] > span', '01'))
  .click();

.get按索引获取元素:

element.all(by.css('[ng-click="select(dt.date)"] > span'))
  .get(0)
  .click();

.first获取第一个元素:

element.all(by.css('[ng-click="select(dt.date)"] > span'))
  .first()
  .click();

答案 1 :(得分:1)

您可以使用问题中提到的相同jquery选择器来单击元素。

$('[ng-click="select(dt.date)"] > span:[text="01"]').click()