如何在量角器中返回警报文本?

时间:2015-05-19 15:51:57

标签: angularjs webdriver protractor

我有一个填写创建客户页面的测试。单击“保存”后,将弹出一条警报,其中包含新生成的客户指南。我尝试创建一个单击保存的功能,捕获警报文本,然后将其返回到我的量角器测试以便稍后使用。

我不理解这些承诺的运作方式,并希望得到一些帮助!

目前,我使用此功能单击保存按钮,然后检查警报以包含消息:

function saveContactAndCheckMessage(saveMessage){
    var addContact = new addContactPage;
    addContact.saveButton.click().then(function(){
        browser.wait(function(){
            return browser.switchTo().alert().then(
                function(){return true;},
                function(){return false;}
            );
        },3000);
        var popupAlert = browser.switchTo().alert();
        expect(popupAlert.getText()).toContain(saveMessage);
        popupAlert.dismiss();
    });
};

使用此功能,它会等待警报打开,然后检查消息。我想稍微修改它以便它不会检查消息,而是返回我的Protractor测试的消息以便以后存储和使用。

function saveContactAndReturnGuid(){
    var addContact = new addContactPage;
    addContact.saveButton.click().then(function(){
        browser.wait(function(){
            return browser.switchTo().alert().then(
                function(){return true;},
                function(){return false;}
            );
        },3000);
        var popupAlert = browser.switchTo().alert();
        var result = popupAlert.getText();
        popupAlert.dismiss();
        return result;
    });
};

然后调用它的代码:

 var customerGuid = addContactFunctions.saveContactAndReturnGuid();
 expect(customerGuid).toMatch('Example to check what the real guid value is');

不幸的是,这个函数返回一个未定义的变量。如果我稍微改变一下:

        ...
        var popupAlert = browser.switchTo().alert();
        var result = popupAlert.getText();
        expect(result).toMatch('Test');
        return result;
        ...

期望能够看到guid在函数内部生成得很好。即使在预期之后直接返回,它仍然会返回' undefined'。

我知道这是因为它是异步的,但我不确定要解决这个问题。关于这个去哪里的想法?

编辑:在函数外部仍显示数据未定义的备用项。

    var customerGuid;

    addContact.saveButton.click().then(function(){
        browser.wait(function(){
            return browser.switchTo().alert().then(
                function(alert){
                    expect(alert.getText()).toContain('test'); <---- This shows the alert message correctly
                    customerGuid = alert.getText(); <---- This shows up as undefined later
                    alert.dismiss();
                    return true;
                },
                function(){
                    return false;
            });
        },3000);
    });

expect(customerGuid).toMatch('test'); <---- Fails, undefined

2 个答案:

答案 0 :(得分:3)

以下是我最终解决的问题:

addContact_spec.js

boolean hasFlush = cards.stream()
     .collect(Collectors.groupingBy(x -> x.getSuit(), Collectors.counting()))
     .values().stream().anyMatch(x -> x == 5);

addContact_functions.js

var addContactFunctions = require('./../../pages/addContact/addContact_functions.js');

describe('From an alert, ', function(){
     it('the alert text can be saved', function(){
         var addContactFuncts = new addContactFunctions();

        // Save and get the customer guid
        var custGuid;
        custGuid = addContactFuncts.saveAndReturnGuid();
        expect(custGuid).toContain('randomguid');  <---- This will fail, but have the real guid inside
    });    
});

我需要browser.wait并返回browser.switchTo.alert,以便等待警报弹出。由于我的知识有限,找到放置alertText的正确空间只是试验和错误。

答案 1 :(得分:2)

您正在寻找的是在then功能中获取提醒。

var myAlertText;
browser.switchTo().alert()
    .then(function (alert) {
        if (alert) {
            alert.getText(function(alertText){
                expect(alertText).toContain('Test');
                myAlertText = alertText;
            });
            return alert.dismiss();
        }
    });