我发现了针对AngularJS Web应用程序制作的Protractor框架。
如何在未使用AngularJS的网站上使用Protractor?
我写了我的第一个测试,量角器触发此消息:
Error: Angular could not be found on the page https://www.stratexapp.com/ : retries looking for angular exceeded
Answers:
如果您的测试需要与非角度页面进行交互,请使用直接访问webdriver实例browser.driver
。
browser.driver.get('http://localhost:8000/login.html');
browser.driver.findElement(by.id('username')).sendKeys('Jane');
browser.driver.findElement(by.id('password')).sendKeys('1234');
browser.driver.findElement(by.id('clickme')).click();
另一种方法是browser.ignoreSynchronization = true
在browser.get(...)之前设置。量角器不会等待Angular加载,您可以使用通常的element(...)语法。
browser.ignoreSynchronization = true;
browser.get('http://localhost:8000/login.html');
element(by.id('username')).sendKeys('Jane');
element(by.id('password')).sendKeys('1234');
element(by.id('clickme')).click();
现在应使用waitForAngular而不是已弃用的ignoreSynchronization属性。
下面的waitForAngular指导是从Protractor文档中获取的,用于超时:
如何禁用等待Angular
如果您需要导航到不使用Angular的页面,则可以通过设置`browser.waitForAngularEnabled(false)关闭等待Angular的页面。例如:
browser.waitForAngularEnabled(false); browser.get('/non-angular-login-page.html'); element(by.id('username')).sendKeys('Jane'); element(by.id('password')).sendKeys('1234'); element(by.id('clickme')).click(); browser.waitForAngularEnabled(true); browser.get('/page-containing-angular.html');
在某些情况下,为了避免错误,需要同时添加两个值。
browser.driver.ignoreSynchronization = true;
browser.waitForAngularEnabled(false);
您可以将它们添加到spec.js文件中。
describe('My first non angular class', function() {
it ('My function', function() {
browser.driver.ignoreSynchronization = true;
browser.waitForAngularEnabled(false);
或者按照@Mridul建议,将它们添加到config.js文件中。
exports.config = {directConnect:true,框架:“ jasmine”,
onPrepare: function () {
browser.driver.ignoreSynchronization = true;// for non-angular set true. default value is false
browser.waitForAngularEnabled(false); // for non-angular set false. default value is true
},
就个人而言,由于没有及时正确地加载DOM元素,因此我在提出的解决方案方面没有获得任何成功。
我尝试了许多处理异步行为的方法,包括使用browser.isElementPresent的browser.wait,但没有一个令人满意。
诀窍是使用onPropare中的Protractor从其方法返回Promises:
onPrepare: () => {
browser.manage().window().maximize();
browser.waitForAngularEnabled(true).then(function () {
return browser.driver.get(baseUrl + '/auth/');
}).then(function () {
return browser.driver.findElement(by.name('login')).sendKeys('login');
}).then(function () {
return browser.driver.findElement(by.name('password')).sendKeys('password');
}).then(function () {
return browser.driver.findElement(by.name('submit')).click();
}).then(function () {
return true;
});
return browser.driver.wait(function () {
return browser.driver.getCurrentUrl().then(function (url) {
return /application/.test(url);
});
}, 10000);
},
我的灵感来自https://github.com/angular/protractor/blob/master/spec/withLoginConf.js
在您的.js规范文件中添加以下代码段
beforeAll(function() {
browser.waitForAngularEnabled(false);
});
我正在研究aurelia网络应用程序,这是一个类似于Angular和React的FE框架。在此,我使用量角器进行自动化。
Tech Stack我的哪个项目:-
主要更改仅在配置文件中发生,如果有帮助,我可以在github中添加代码,这是我在我的项目中使用的配置文件,对我来说很完美。在我的wordpress中也张贴了一些博客,希望能有所帮助。
const reporter = require('cucumber-html-reporter');
exports.config = {
SELENIUM_PROMISE_MANAGER: false,
directConnect: true,
specs: ["./e2e/features/*/EndToEnd.feature"],
format: 'json:cucumberReport.json',
framework: 'custom',
frameworkPath: require.resolve('protractor-cucumber-framework'),
cucumberOpts: {
strict: true,
format: 'json:cucumberReport.json',
keepAlive: false,
require: [
'./e2e/hooks/*.ts',
'./e2e/stepDefinition/*/*.ts',
],
tags: '@Regression'
},
beforeLaunch: function () {
require('ts-node/register')
},
onPrepare: async () => {
await browser.waitForAngularEnabled(false);
await browser.ignoreSynchronization == true;
await browser.manage().window().maximize();
await browser.manage().timeouts().implicitlyWait(10000);
},
onComplete: async () => {
var options = {
theme: 'bootstrap',
jsonFile: './reports/cucumberReport.json',
output: './reports/cucumberReport.html',
reportSuiteAsScenarios: true,
launchReport: false,
screenshotsDirectory: './reports/screenshots',
storeScreenshots: true,
metadata: {
"Test Environment": "SAND-DEV-1",
"Platform": "Windows 10",
}
};
reporter.generate(options);
},
};
by.id
变成了By.id
?