量角器:正确使用转发器和过滤器

时间:2017-02-16 21:20:36

标签: javascript protractor

我目前正在尝试迭代转发器并删除由我的测试创建的广告系列。该名称是通过spec文件中的调用传入的,然后应该使用它来过滤转发器中的任何广告系列,并在找到具有该名称的广告时选择删除按钮,目前它似乎不起作用,我我不知道为什么因为我没有找到任何错误的元素未找到等等。所以我认为我的逻辑是错误的。

我正在使用pageObject.js来支持spec.js文件。

pageObject.js

this.campaignDelete = function(name) { // Currently not tested.     
        element.all('campaign in campaignsName').filter(function(item) {
            item.element(by.binding('campaign.Name')).getText().then(function(title) {
                item.foreach(function() {
                    if(title === name) {
                        this.delete = element(by.css('[ng-click="showDeleteCampaignModel(campaign)"]')).click();  
                        this.confirm = element(by.css('[ng-click="deleteCampaign()"]')).click();
                    } 
                });
            });
        });
    };

Spec.js

describe('Deletes the newly created campaign', function() {

    beforeEach(function() {
        browser.get(browser.params.urls.dashboard);
    });

    it('Should delete the newly created campaign', function() {
        campaignPage.campaignDelete(browser.params.campaign.name);
    });
});

1 个答案:

答案 0 :(得分:0)

代码中的第二行缺少 by.repeater 定位器策略,它应该是 - element.all(by.repeater('campaign in campaignsName')).filter(function(item) {

您可以使用 - element.all(by.repeater('campaign in campaignsName').column('campaign.Name'))

直接获取所有广告系列名称元素

by.repeater

以下代码应该能够返回匹配的广告系列。

 var reqcamp = element.all(by.repeater('campaign in campaignsName').column('campaign.Name')).filter(function(elem, index) {
      return elem.getText().then(function(text) {
        return text === name;
      });
    }).first();

我不确定删除声明即。 css部分,是正确的(不确定没有HTML)。如果它不包括相关的广告系列,那么它只会找到页面上的第一个匹配元素。