![](/img/trans.png)
[英]Failed: Error while waiting for Protractor to sync with the page: “angular could not be found on the window”
[英]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.