我正在测试角网站。我们的应用程序从登录页面开始,然后是垂直应用程序选择框(在页面的左下角),这是非角色网页,然后在左框架中选择应用程序后,它打开另一个内部的角度网站框架(应用程序选择框的权利)。
我有以下代码使用Cucumber和Protractor自动化场景。 登录并从左框架启动应用程序后,我收到错误消息:
未捕获异常:等待量角器与页面同步时出错:"在窗口中找不到角度"。
[launcher]进程已退出,错误代码为1
使用退出代码1完成处理
请在下面找到代码段:
var chai = require('chai');
var chaiAsPromised = require('chai-as-promised');
chai.use(chaiAsPromised);
var expect = chai.expect;
var assert = chai.assert;
var myStepDefinitionsWrapper = function () {
this.Given(/^I login to the application with valid (.*) and (.*)$/, function (username, password) {
browser.driver.get(browser.baseUrl);
browser.driver.wait(function () {
return browser.driver.isElementPresent(by.id("ContentPlaceHolder1_UsernameTextBox"));
}, 10000);
browser.driver.findElement(by.id("ContentPlaceHolder1_UsernameTextBox")).then(function (usernameField) {
usernameField.sendKeys(username);
});
browser.driver.findElement(by.id("ContentPlaceHolder1_PasswordTextBox")).then(function (passwordField) {
passwordField.sendKeys(password);
});
return browser.driver.findElement(by.id("ContentPlaceHolder1_SubmitButton")).click();
});
this.Given(/^I launch the application from application selection page$/, function () {
browser.driver.wait(function () {
return browser.driver.isElementPresent(by.xpath("//a[starts-with(@class,'cp-icon') and contains(@style,'applaunch_default_26x26')]"));
}, 10000);
browser.driver.findElement(by.xpath("//a[starts-with(@class,'cp-icon') and contains(@style,'applaunch_default_26x26')]")).click();
browser.driver.wait(function () {
return browser.driver.isElementPresent(by.xpath("//span[contains(@title,'AppName')]"));
}, 10000);
return browser.driver.findElement(by.xpath("//span[contains(@title,'AppName')]")).click();
});
this.When(/^I open the task for the (.*)$/, function (PersonName) {
//Anugular Website starts from here
browser.waitForAngular();
return element(by.xpath("//td[contains(text(),'" + personName + "')]/following::td[2]/button[text()='Perform']")).click();
});

答案 0 :(得分:1)
之前我曾经有过几次这个问题,特别是登录页面(带有角度)会将我带到“成功”页面(没有角度),然后将我重定向到着陆页(带角度)。 / p>
这通常很有效:
loginBtn.click();
browser.wait(function () {
return browser.executeScript('return !!window.angular');
}, 10000, 'Timed out waiting for angular after login page);
看看你是否也可以为你效劳!
修改后修改: 甜,这个看起来很棘手!让我们看看我们能找到什么。
你可以切换到相框吗?看看这个:
https://angular.github.io/protractor/#/api?view=webdriver.WebDriver.TargetLocator.prototype.frame https://angular.github.io/protractor/#/api?view=webdriver.WebDriver.prototype.switchTo
由于它在开始时是非角度的,您可能需要:
browser.driver.switchTo().frame(element(by.id('frameWithAngular')));
我认为你不需要一个browser.wait直到你可以切换到框架,但我不确定当你在开始时处于非角度区域时的行为。
要尝试的另一件事是将配置指向使用rootElement的角度区域(第173行): https://github.com/angular/protractor/blob/master/docs/referenceConf.js
这可能会破坏您的其他流程,具体取决于网站布局。关于iframe的更多阅读,虽然所有角度都谈到了正确等待帧: Protractor: Testing Angular App in an Iframe
请告诉我你是否可以接近这个!
答案 1 :(得分:0)
使用iframe名称切换到包含角度网站的iframe。
browser.driver.switchTo().frame('<Frame Name>');
此外,它不适用于量角器2.0和2.1。所以我不得不将量角器降级到1.8.0