【问题标题】:Error while waiting for Protractor to sync with the page: "angular could not be found on the window" on running protractor test case等待量角器与页面同步时出错:在运行量角器测试用例时“在窗口上找不到角度”
【发布时间】:2015-07-09 15:25:30
【问题描述】:

我正在测试 Angular 网站。我们的应用程序从登录页面开始,然后是垂直应用程序选择框架(在页面的左角),它们是非 Angular 网页,然后在左框架中选择应用程序后,它会在另一个框架内打开 Angular 站点框架(应用程序选择框架的右侧)

我有以下代码来使用 Cucumber 和 Protractor 自动化场景。 从左侧框架登录并启动应用程序后,我收到错误消息:

未捕获的异常:等待量角器与页面同步时出错:“在窗口上找不到角度”。

[启动器] 进程退出,错误代码为 1

进程以退出代码 1 结束

请在下面找到代码sn-p:

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();
    });

【问题讨论】:

    标签: javascript angularjs selenium protractor


    【解决方案1】:

    我之前遇到过几次这个问题,特别是登录页面(带有角度)将我带到“成功”页面(没有角度),然后将我重定向到登录页面(带有角度)。

    这通常效果很好:

    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')));
    

    我认为你不需要浏览器。等到你可以切换到框架,但我不确定你在开始时处于非角度区域时的行为。

    要尝试的另一件事是将您的配置指向 angular 将与 rootElement 一起使用的区域(第 173 行): https://github.com/angular/protractor/blob/master/docs/referenceConf.js

    不过,这可能会扰乱您的其余流程,具体取决于站点布局。更多关于 iframe 的阅读,尽管所有角度都是关于正确等待帧的: Protractor: Testing Angular App in an Iframe

    让我知道你是否可以更进一步!

    【讨论】:

    • 嗨对不起,我已经编辑了我的问题,以便更清楚。我的应用程序在页面的右侧框架中打开,该框架是有角度的。左框架是无角度的。
    • 好的,现在尝试检查我的编辑。看看这是否能让你更接近!
    • 我没有 iframe 标记的 ID,所以我修改了 html 标记以具有 id,然后根据您的建议运行量角器测试,我仍然遇到问题:错误:错误同时等待量角器与页面同步:“在窗口上找不到角度”在错误(本机)====异步任务==== WebDriver.switchTo().frame([object Object])在[object Object].webdriver.WebDriver.schedule ==== async task ==== at [object Object].webdriver.promise.ControlFlow.wait
    • 当前 iframe 标签: 量角器代码:browser.driver.wait(function() { return browser.driver.switchTo().frame(element(by.id('ACDSFrame'))); } ,10000);
    • Frame Id 对我不起作用。相反,我使用框架名称切换到包含角度站点的 iframe。 browser.driver.switchTo().frame('');此外,它不适用于量角器 2.0 和 2.1。所以我不得不将量角器降级到 1.8.0
    【解决方案2】:

    使用 iframe 名称切换到包含 angular 网站的 iframe。

    browser.driver.switchTo().frame('<Frame Name>'); 

    此外,它不适用于量角器 2.0 和 2.1。所以我不得不将量角器降级到 1.8.0

    【讨论】:

      猜你喜欢
      • 2014-05-16
      • 2019-10-03
      • 2018-12-07
      • 1970-01-01
      • 2019-08-16
      • 2016-08-16
      • 1970-01-01
      • 1970-01-01
      • 2015-03-28
      相关资源
      最近更新 更多