量角器:获取警报文本?

时间:2013-11-09 17:08:30

标签: javascript angularjs webdriver jasmine protractor

我正在使用Protractor测试我的Angular应用程序。我查看the docs并找不到任何方法来获取警报文本。这不是DOM本身的一个元素(至少,不是我能弄明白的;当有警报时,Chrome的检查员将不允许你检查它)。我如何测试警报是否有正确的消息?或者甚至,那个存在?

修改

这是我的代码。 HTML:

  <button id='alertButton' data-ng-click='ngAlert()'>Button</button>

JS:

$scope.ngAlert = function(){
  window.alert('Hello');
};

量角器规格:

  describe('alert', function(){
    var ptor = protractor.getInstance();
    beforeEach(function(){
      button = $('#alertButton');
      button.click();
    });
    it('tells the alert message', function(){
      expect(button.getText()).toEqual('Button');
    });
  });

当我按下这样的按钮文本时断言:

it('tells the alert message', function(){
  expect(button.getText()).toEqual('Button');
});

它过去了。但是,如果我尝试阅读这样的提醒:

it('tells the alert message', function(){
  var alertDialog = ptor.switchTo().alert();
  expect(alertDialog.getText()).toEqual('Hello');
});

我收到此错误:

  

$ protractor spec / e2e / conf.js使用selenium服务器   http://localhost:4444/wd/hub .F

     

故障:

     

1)警告告诉警报消息消息:        NoSuchAlertError:没有警报打开(会话信息:chrome = 30.0.1599.101)(驱动程序信息:chromedriver = 2.2,platform = Mac OS   X 10.9.0 x86_64)(警告:服务器未提供任何堆栈跟踪   信息)命令持续时间或超时:3毫秒构建信息:   版本:'2.35.0',修订版:'c916b9d',时间:'2013-08-12 15:42:01'   系统信息:os.name:'Mac OS X',os.arch:'x86_64',os.version:   '10 .9',java.version:'1.6.0_65'会话ID:   edbaa752eb14ad45f7e961903b69a466驱动程序信息:   org.openqa.selenium.chrome.ChromeDriver Capabilities [{platform = MAC,   acceptSslCerts = true,javascriptEnabled = true,browserName = chrome,   chrome = {chromedriverVersion = 2.2},rotate = false,   locationContextEnabled = true,version = 30.0.1599.101,   cssSelectorsEnabled = true,databaseEnabled = true,handlesAlerts = true,   browserConnectionEnabled = false,nativeEvents = true,   webStorageEnabled = true,applicationCacheEnabled = false,   takesScreenshot =真}]

     

在2.125秒完成2次测试,2次断言,1次失败

     

/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/promise.js:1542         抛出错误;               ^ NoSuchAlertError:没有警报打开

但是我已经在页面上测试了它并且它可以工作,测试可以清楚地找到DOM中的按钮。那么要么click()函数不起作用,要么正在发生其他事情?

2 个答案:

答案 0 :(得分:9)

在测试中,获取当前的Protractor实例并使用switchTo().alert()访问alert对话框:

var ptor = protractor.getInstance();

var alertDialog = ptor.switchTo().alert();

expect(alertDialog.getText()).toEqual("Hello");

请记住,Protractor基本上只是Selenium WebDriver的包装器,所以据我所知,你可以用Selenium WebDriver做任何事情,你可以用Protractor做。

编辑包括完整测试:

describe('Alert dialog', function () {

    var ptor = protractor.getInstance(),
        button;

    beforeEach(function () {
        // This line is necessary on my end to get to my test page.
        // browser.driver.get('http://localhost:8000/test.html');
        button = ptor.findElement(protractor.By.id('alertButton'));
        button.click();
    });

    it('tells the alert message', function () {
        var alertDialog = ptor.switchTo().alert();
        expect(alertDialog.getText()).toEqual("Hello");
    });

});

您的应用程序可能仍在执行测试时初始化,这可以解释为什么没有出现对话框的原因。确保您的应用程序“准备就绪”并且可以在进行断言之前实际显示警报。希望有所帮助!

答案 1 :(得分:2)

您必须等待浏览器打开警报。使用Protractor 2.2.0的示例:

   var timeoutInMilliseconds = 1000;
   browser.wait(protractor.ExpectedConditions.alertIsPresent(), timeoutInMilliseconds);
   var alertDialog = browser.switchTo().alert();
   expect(alertDialog.getText()).toEqual("Hello World!");