"angular is not defined" 对存储在 Liferay 中的 angular 应用程序执行 Protractor 测试时出错
"angular is not defined" error while executing Protractor test on angular application stored in Liferay
我 运行 在 Ubuntu 14.04 虚拟主机上,我正在尝试使用 PROTRACTOR 为 "Liferay" 中托管的应用程序创建一些 E2E 测试。
对于登录部分(不需要 angular),使用量角器的测试正常,页面登录并正确导航,但是当我尝试打开 "drop-down" 菜单时angular基于 js 的应用程序,代码如下:
<select class = "form-control menu-select ng-pristine ng-valid"
ng-model = "topTitlesData.topFiveDateRange"
name = "topFiveDateRange"
ng-options = "range.name for range in topTitlesData.topFiveDateRangeValues"
ng-change = "" > < option value = "0" > Last day < /option><option value="1">Last 5 days</option > < option value = "2" > Last 7 days < /option><option value="3">Last 30 days</option > < option value = "4" > last 90 days < /option></select>
我得到了这个错误日志:
UnknownError: 未知错误: angular 未定义
This is the test script on js:
describe('pages with login', function() {
it('should log in with a non-Angular page and select and option', funcion() {
browser.ignoreSynchronization = true;
browser.get('***************');
element(by.id('_58_login')).clear();
element(by.id('_58_login')).sendKeys('*******');
expect(element(by.id('_58_login')).getAttribute('value')).toEqual('*****');
element(by.id('_58_password')).sendKeys('*****', protractor.Key.ENTER);
browser.get('***************');
//browser.ignoreSynchronization = false;
var selects = element.all(by.model('topTitlesData.topFiveDateRange'));
expect(selects.count()).toEqual(5);
});
});
我想知道,我错过了什么?
我安装并更新了 nodejs、protractor、webadmin-manager、jdk7.*
问题很可能是您的测试 运行 在浏览器页面完全加载之前。 angular
全局变量尚未创建。您可以通过将以下行放入 protractor.conf.js
文件的 onPrepare
方法来确保在测试开始之前所有内容都已加载:
browser.driver.get(browser.baseUrl);
这将在任何测试开始之前导航到页面并确保所有内容都已加载。
谢谢,问题是测试没有等到 angular 加载到页面...所以我用 "Grunt"、[=22 的应用程序设置了一个本地主机=] 和 Ruby + "ruby-compass" gem 并避免了 liferay。我还设置了
allScriptsTimeout: 5000000,
在 config.js 文件中,现在测试 运行 没问题。
我 运行 在 Ubuntu 14.04 虚拟主机上,我正在尝试使用 PROTRACTOR 为 "Liferay" 中托管的应用程序创建一些 E2E 测试。
对于登录部分(不需要 angular),使用量角器的测试正常,页面登录并正确导航,但是当我尝试打开 "drop-down" 菜单时angular基于 js 的应用程序,代码如下:
<select class = "form-control menu-select ng-pristine ng-valid"
ng-model = "topTitlesData.topFiveDateRange"
name = "topFiveDateRange"
ng-options = "range.name for range in topTitlesData.topFiveDateRangeValues"
ng-change = "" > < option value = "0" > Last day < /option><option value="1">Last 5 days</option > < option value = "2" > Last 7 days < /option><option value="3">Last 30 days</option > < option value = "4" > last 90 days < /option></select>
我得到了这个错误日志:
UnknownError: 未知错误: angular 未定义
This is the test script on js:
describe('pages with login', function() {
it('should log in with a non-Angular page and select and option', funcion() {
browser.ignoreSynchronization = true;
browser.get('***************');
element(by.id('_58_login')).clear();
element(by.id('_58_login')).sendKeys('*******');
expect(element(by.id('_58_login')).getAttribute('value')).toEqual('*****');
element(by.id('_58_password')).sendKeys('*****', protractor.Key.ENTER);
browser.get('***************');
//browser.ignoreSynchronization = false;
var selects = element.all(by.model('topTitlesData.topFiveDateRange'));
expect(selects.count()).toEqual(5);
});
});
我想知道,我错过了什么?
我安装并更新了 nodejs、protractor、webadmin-manager、jdk7.*
问题很可能是您的测试 运行 在浏览器页面完全加载之前。 angular
全局变量尚未创建。您可以通过将以下行放入 protractor.conf.js
文件的 onPrepare
方法来确保在测试开始之前所有内容都已加载:
browser.driver.get(browser.baseUrl);
这将在任何测试开始之前导航到页面并确保所有内容都已加载。
谢谢,问题是测试没有等到 angular 加载到页面...所以我用 "Grunt"、[=22 的应用程序设置了一个本地主机=] 和 Ruby + "ruby-compass" gem 并避免了 liferay。我还设置了
allScriptsTimeout: 5000000,
在 config.js 文件中,现在测试 运行 没问题。