簡體   English   中英

等待量角器與頁面同步時出錯:在運行量角器測試用例時“在窗口中找不到角度”

[英]Error while waiting for Protractor to sync with the page: “angular could not be found on the window” on running protractor test case

我正在測試有角度的網站。 我們的應用程序從“登錄”頁面開始,然后是垂直應用程序選擇框架(在頁面的左角),它們是“非角度”網頁,然后在左側框架中選擇應用程序后, 它將在另一個框架內打開角度站點(右側到應用程序選擇框架)

我有以下代碼來使用Cucumber和Protractor自動化方案。 登錄並從左框架啟動應用程序后,我收到以下錯誤消息:

未捕獲的異常:等待量角器與頁面同步時出錯:“在窗口中找不到角度”。

[啟動器]進程退出,錯誤代碼為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(); }); 

我之前有過幾次這個問題,特別是登錄頁面(帶角度)將我帶到“成功”頁面(無角度),然后將我重定向到登錄頁面(帶角度)。

這通常效果很好:

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 。切換到

由於開始時它是非角度的,因此您可能需要:

browser.driver.switchTo().frame(element(by.id('frameWithAngular')));

我認為您不需要瀏覽器。請耐心等待,直到可以切換到框架為止,但是我不確定在開始時處於非角度區域時的行為。

嘗試嘗試的另一件事是使用rootElement(第173行)將您的配置指向要成角度的區域: https : //github.com/angular/protractor/blob/master/docs/referenceConf.js

但是,這可能會干擾您的其余流程,具體取決於網站布局。 關於iframe的更多信息,盡管涉及角度都涉及正確等待幀: 量角器:在iframe中測試Angular App

讓我知道您是否可以更進一步!

使用iframe名稱切換到包含角網站的iframe。

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

而且,它不適用於量角器2.0和2.1。 所以我不得不將量角器降級到1.8.0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM