browser.get 在给定的 URL 使用量角器完全加载之前返回
browser.get returning before the given URL completely loads using Protractor
我正在使用 Protractor 和 Cucumber 编写一些测试,但我在某个时候卡住了。在登录后的步骤中,我使用量角器提供的 browser.get(url) 函数重新路由到另一个页面。但它总是在页面完全加载之前 returns 。到目前为止,我已经尝试了很多解决方案,但没有成功。我尝试使用 browser.wait、browser.get(url).then(function(){ // 加载时的代码}) 但我得到 0 个正面结果。
这是我的代码:
// Steps will be implemented here
this.Given(/^I am logged in as user \'([^\']*)\'$/, function (user, callback) {
console.log('USER: ' + user);
browser.driver.get('https://cit-was70-l06/ipa')
browser.driver.findElement(by.xpath('my_xpath')).sendKeys(user);
browser.driver.findElement(by.xpath('my_xpath')).sendKeys(user);
browser.driver.findElement(by.xpath('my_xpath')).click().then(callback);
});
this.Then(/^The screen is shown, with title \'([^\']*)\'$/, function (title, callback) {
console.log('Title from feature file: ' + title);
var url = 'some/url/in/application/';
browser.get(url).then(function(){
// This portion executes before page is completely loaded.
// So if I try to get any element, it throws me an error.
// [15:32:13] E/launcher - "process.on('uncaughtException'" error, see
// launcher
// [15:32:13] E/launcher - Process exited with error code 199
// It works if I add static delay to wait for page load completely
// but that will not be a good solution if I have too much pages to test
callback();
});
console.log('After page laoad');
});
我们将不胜感激任何建议的解决方法。
[15:32:13] E/launcher - "process.on('uncaughtException'" error, see launcher
[15:32:13] E/launcher - Process exited with error code 199
以上错误可能是由多种原因引起的,主要与承诺有关。但它应该抛出正确的信息。此处 https://github.com/angular/protractor/issues/3384 已经提供了解决方法来捕获确切的错误消息。
您可以更改 protractor
依赖项中的 launcher.ts
文件,如上述论坛中所述,以捕获错误以便调试您的问题。
我建议您在 protractor-cucumber
中编写步骤定义时 return
您的承诺而不是 callbacks
,这样黄瓜就会知道何时完成其异步操作。
试试下面的方法code.check是否有帮助。
browser.get(url);
browser.waitForAngular();
then try to call your function.
使用protractor.ExpectedConditions检查成功登录后将显示的页面上任何元素的可见性。写一个自定义的方法如下所示。
如果显示元素,则使用 browser.get();
导航其他页面
Code Snippet
EC = protractor.ExpectedConditions;
//targetElement=element(locator);
this.isElementVisible = function (targetElement, timeOut) {
'use strict';
timeOut = timeOut !== undefined ? timeOut : 8000;
browser.wait(EC.visibilityOf(targetElement),
timeOut).thenCatch(function()
{
assert.fail(' element is not visible');
});
};
我正在使用 Protractor 和 Cucumber 编写一些测试,但我在某个时候卡住了。在登录后的步骤中,我使用量角器提供的 browser.get(url) 函数重新路由到另一个页面。但它总是在页面完全加载之前 returns 。到目前为止,我已经尝试了很多解决方案,但没有成功。我尝试使用 browser.wait、browser.get(url).then(function(){ // 加载时的代码}) 但我得到 0 个正面结果。
这是我的代码:
// Steps will be implemented here
this.Given(/^I am logged in as user \'([^\']*)\'$/, function (user, callback) {
console.log('USER: ' + user);
browser.driver.get('https://cit-was70-l06/ipa')
browser.driver.findElement(by.xpath('my_xpath')).sendKeys(user);
browser.driver.findElement(by.xpath('my_xpath')).sendKeys(user);
browser.driver.findElement(by.xpath('my_xpath')).click().then(callback);
});
this.Then(/^The screen is shown, with title \'([^\']*)\'$/, function (title, callback) {
console.log('Title from feature file: ' + title);
var url = 'some/url/in/application/';
browser.get(url).then(function(){
// This portion executes before page is completely loaded.
// So if I try to get any element, it throws me an error.
// [15:32:13] E/launcher - "process.on('uncaughtException'" error, see
// launcher
// [15:32:13] E/launcher - Process exited with error code 199
// It works if I add static delay to wait for page load completely
// but that will not be a good solution if I have too much pages to test
callback();
});
console.log('After page laoad');
});
我们将不胜感激任何建议的解决方法。
[15:32:13] E/launcher - "process.on('uncaughtException'" error, see launcher
[15:32:13] E/launcher - Process exited with error code 199
以上错误可能是由多种原因引起的,主要与承诺有关。但它应该抛出正确的信息。此处 https://github.com/angular/protractor/issues/3384 已经提供了解决方法来捕获确切的错误消息。
您可以更改 protractor
依赖项中的 launcher.ts
文件,如上述论坛中所述,以捕获错误以便调试您的问题。
我建议您在 protractor-cucumber
中编写步骤定义时 return
您的承诺而不是 callbacks
,这样黄瓜就会知道何时完成其异步操作。
试试下面的方法code.check是否有帮助。
browser.get(url);
browser.waitForAngular();
then try to call your function.
使用protractor.ExpectedConditions检查成功登录后将显示的页面上任何元素的可见性。写一个自定义的方法如下所示。
如果显示元素,则使用 browser.get();
导航其他页面Code Snippet
EC = protractor.ExpectedConditions;
//targetElement=element(locator);
this.isElementVisible = function (targetElement, timeOut) {
'use strict';
timeOut = timeOut !== undefined ? timeOut : 8000;
browser.wait(EC.visibilityOf(targetElement),
timeOut).thenCatch(function()
{
assert.fail(' element is not visible');
});
};