nic*_*tme 5 javascript webdriver jasmine angularjs protractor
我正在用Protractor测试我的Angular应用程序.我查看了文档,找不到任何方法来获取警报文本.这不是DOM本身的一个元素(至少,不是我能弄明白的;当有警报时,Chrome的检查员将不允许你检查它).我如何测试警报是否有正确的消息?或者甚至,那个存在?
这是我的代码.HTML:
<button id='alertButton' data-ng-click='ngAlert()'>Button</button>
Run Code Online (Sandbox Code Playgroud)
JS:
$scope.ngAlert = function(){
window.alert('Hello');
};
Run Code Online (Sandbox Code Playgroud)
量角器规格:
describe('alert', function(){
var ptor = protractor.getInstance();
beforeEach(function(){
button = $('#alertButton');
button.click();
});
it('tells the alert message', function(){
expect(button.getText()).toEqual('Button');
});
});
Run Code Online (Sandbox Code Playgroud)
当我对按钮文本进行断言时,如下所示:
it('tells the alert message', function(){
expect(button.getText()).toEqual('Button');
});
Run Code Online (Sandbox Code Playgroud)
它过去了.但是,如果我尝试读取这样的警报:
it('tells the alert message', function(){
var alertDialog = ptor.switchTo().alert();
expect(alertDialog.getText()).toEqual('Hello');
});
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
$量角器规格/ E2E/conf.js使用硒服务器的 HTTP://本地主机:4444/WD /集线器 .F
失败:
1)警告告诉警报消息消息:NoSuchAlertError:没有警报打开(会话信息:chrome = 30.0.1599.101)(驱动程序信息:chromedriver = 2.2,平台= 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 = true}]
完成2.125秒2次测试,2次断言,1次失败
/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/promise.js:1542 throw error; ^ NoSuchAlertError:没有警报打开
但是我已经在页面上测试了它并且它可以工作,测试可以清楚地找到DOM中的按钮.所以要么click()功能不起作用,要么正在发生其他事情?
在测试中,获取当前的Protractor实例并使用它switchTo().alert()来访问alert对话框:
var ptor = protractor.getInstance();
var alertDialog = ptor.switchTo().alert();
expect(alertDialog.getText()).toEqual("Hello");
Run Code Online (Sandbox Code Playgroud)
请记住,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");
});
});
Run Code Online (Sandbox Code Playgroud)
您的应用程序可能仍在执行测试时初始化,这可以解释为什么没有出现对话框的原因.确保您的应用程序"准备就绪"并且可以在进行断言之前实际显示警报.希望有所帮助!
您必须等待浏览器打开/显示警报。使用 Protractor 2.2.0 的示例:
var timeoutInMilliseconds = 1000;
browser.wait(protractor.ExpectedConditions.alertIsPresent(), timeoutInMilliseconds);
var alertDialog = browser.switchTo().alert();
expect(alertDialog.getText()).toEqual("Hello World!");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17403 次 |
| 最近记录: |