我使用量角器&黃瓜框架自動化角4應用程序。函數在5000毫秒後超時 - 角4 - 量角器和黃瓜
獲取單擊按鈕的錯誤。 (不是所有的時間)
1) Scenario: Scenario 2 - features\Home.feature:9
Step: Then Click on edit button - features\Home.feature:11
Step Definition: stepDefinitions\FirstStep.ts:31
Message:
Error: function timed out after 5000 milliseconds
at Timeout.<anonymous> (C:\MyWorkspace\protractor-cucumber-final\protractor-cucumber-final\node_modules\cucumber\lib\user_code_runner.js:91:22)
at ontimeout (timers.js:386:14)
at tryOnTimeout (timers.js:250:5)
at Timer.listOnTimeout (timers.js:214:5)
Checked here我認爲沒有必要設置等待時間爲量角器有足夠的智能如下解決的承諾
我的項目的詳細信息:
節點:v6.10.3 量角器:V5.1.2
StepDefinition.ts:
let homePage = new HomePage();
Then(/^Click on edit button$/, async() => {
await homePage.clickEditButton();
});
個
HomePage.ts:
async clickEditButton() {
console.log('clicking on Edit Button');
await this.editButton.click();
}
的package.json(它的一部分)
"main": "index.js",
"scripts": {
"test": "protractor config/config.js",
"webdriver-start": "webdriver-manager start",
"webdriver-update": "webdriver-manager update"
},
"dependencies": {
"chai": "^4.0.2",
"cucumber": "^2.3.0",
"mkdirp": "^0.5.1",
"protractor": "^5.1.1",
"protractor-cucumber-framework": "^3.1.0"
},
"devDependencies": {
"chai-as-promised": "^6.0.0",
"cucumber-html-report": "^0.6.0",
"cucumber-html-reporter": "^0.5.2",
"cucumberjs-allure-reporter": "^1.0.3",
"pg": "^6.0.3"
}
config.js
var chai = require("chai");
var chaiAsPromised = require("chai-as-promised");
chai.use(chaiAsPromised);
exports.config = {
seleniumAddress: "http://localhost:4444/wd/hub",
baseUrl: "http://localhost:4200/",
framework: "custom",
frameworkPath: require.resolve("protractor-cucumber-framework"),
specs: ["../features/*.feature"],
exclude: "../features/database.feature",
resultJsonOutputFile: "./reports/json/protractor_report.json",
onPrepare: function() {
// browser.ignoreSynchronization = true;
browser.manage().window().maximize();
global.expect = chai.expect;
},
cucumberOpts: {
strict: true,
format: ["pretty"],
require: ["../stepDefinitions/*.js", "../support/*.js"],
tags: "@micro"
}
};
感謝推進
修訂版28 Aug'17:
ManageRecipeStep.ts
import {defineSupportCode} from 'cucumber';
import {ManageRecipePage} from "../pages/ManageRecipePage";
var chai = require("chai");
var chaiAsPromised = require("chai-as-promised");
chai.use(chaiAsPromised);
let expect = chai.expect;
Then(/^Cancel button should be displayed$/, async() => {
await expect(manageRecipePage.getCancelButton()).to.eventually.equal('Cancel');
});
ManageRecipePage.ts
import {ActionUtil} from "../utils/ActionUtil";
import {BasePage, IdentificationType} from "../utils/BasePage";
const Locators = {
cancelByText: {
type:IdentificationType[IdentificationType.PartialButtonText],
value: "Cancel"
}
};
let actionUtil = new ActionUtil();
export class ManageRecipePage extends BasePage {
async getCancelButton() {
await actionUtil.getElementText(Locators.cancelByText);
}
}
ActionUtil.ts
import {BasePage} from "./BasePage";
export class ActionUtil {
private basePage: BasePage = new BasePage();
async getElementText(obj) {
let attempts = 0;
while(attempts < 2) {
try {
return await this.basePage.ElementLocator(obj).getText();
} catch(StaleElementException) {
console.log("EXCEPTION while getting Text" + StaleElementException);
}
attempts++;
}
return null; // todo: this case
}
BasePage.ts
import { browser, element, by, protractor, $$, $ } from 'protractor';
export enum IdentificationType {
Xpath,
Css,
Id,
Js,
Name,
PartialLinkText,
ClassName,
PartialButtonText
}
export class BasePage {
ElementLocator(obj) {
switch (obj.type) {
case IdentificationType[IdentificationType.Xpath]:
return element(by.xpath(obj.value));
case IdentificationType[IdentificationType.ClassName]:
return element(by.className(obj.value));
case IdentificationType[IdentificationType.Id]:
return element(by.id(obj.value));
case IdentificationType[IdentificationType.Js]:
return element(by.js(obj.value));
case IdentificationType[IdentificationType.Css]:
return element(by.css(obj.value));
case IdentificationType[IdentificationType.PartialButtonText]:
return element(by.partialButtonText(obj.value));
default:
break;
}
}
}
評論AR e不適合長時間討論;這個對話已經[在聊天中存檔](http://chat.stackoverflow.com/rooms/153004/discussion-on-answer-by-quirimmo-function-timed-out-after-5000-milliseconds-an)。 –