等待量角器与页面同步时出错:"在窗口中找不到角度"关于运行量角器测试用例

时间:2015-07-09 15:25:30

标签: javascript angularjs selenium protractor

我正在测试角网站。我们的应用程序从登录页面开始,然后是垂直应用程序选择框(在页面的左下角),这是非角色网页,然后在左框架中选择应用程序后,它打开另一个内部的角度网站框架(应用程序选择框的权利)

我有以下代码使用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();
    });




2 个答案:

答案 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