Unable to create object of child class - TypeError: HomePage_1.HomePage is not a constructor
Unable to create object of child class - TypeError: HomePage_1.HomePage is not a constructor
我正在将 typescript 与 Protractor 和 mocha 一起使用。基本上尝试 运行 一个将经过多个页面的测试。我正在尝试使用 POM,但在使用继承时无法实例化对象。
当我尝试创建新对象时出现以下错误:
UnhandledPromiseRejectionWarning: TypeError: HomePage_1.HomePage is not a constructor
我可以实例化一个 class 的对象,但它不会从任何其他 class 扩展(下面的导航对象没有问题)。我在这里尝试了类似问题的各种建议,但其中 none 似乎有效。
这是我的测试class:e2e.ts
import { browser } from 'protractor';
import { Navigation } from './core/Navigation';
import { HomePage } from './page-objects/HomePage';
var nav = new Navigation(); // <-- SUCCESS NO PROBLEMS
var hmPg = new HomePage(); // <-- FAILS HERE
describe('Add product to cart',async function() {
it("start from homepage", async function() {
nav.navigate("index");
});
it("Perform search", async function() {
hmPg.search("monopoly board game");
});
//some more tests here till adding the product to cart
});
首页class:HomePage.ts
import {browser, element, protractor} from 'protractor';
import { BasePageObject } from './BasePageObject';
export class HomePage extends BasePageObject{
private EC = protractor.ExpectedConditions;
private map;
constructor(){
super();
super.loadMap(process.cwd()+"\page-objects\homePage.json");
}
public search(product:string){
//some stuff here
}
//some more methods here.
}
这是我的 BasePageObject.ts class:
//some imports here
export class BasePageObject{
//to store parsed json
public mapData;
public mapPath:string;
public contentData;
public contentPath:string;
constructor(){
//nothing to do here. Just setting the logger.
log = factory.getLogger("BasePageObject");
}
//some other methods here
}
这是我的 tsconfig.json
{
"compileOnSave": true,
"compilerOptions": {
"baseUrl": ".",
"module": "commonjs",
"paths": { "*": ["types/*"] },
"outDir": "./dist/out-tsc",
"mapRoot": "./dist/out-tsc/",
"esModuleInterop": true,
"sourceMap": true,
"declaration": false,
"moduleResolution": "node",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"allowSyntheticDefaultImports": true,
"target": "es6",
"typeRoots": [
"node_modules/@types",
]
}
}
这也是我测试运行ning tsc后生成的js文件class:
Object.defineProperty(exports, "__esModule", { value: true });
var protractor_1 = require("protractor");
var Navigation_1 = require("./core/Navigation");
var HomePage_1 = require("./page-objects/HomePage");
var nav = new Navigation_1.Navigation();
var hmPg = new HomePage_1.HomePage(); <--- FAILS HERE
describe('Add product to cart', function () {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
this.timeout(90000);
it("start from homepage", function () {
return __awaiter(this, void 0, void 0, function () {
....
...
..
.
这是我在 package.json 中的依赖项:
"dependencies": {
"@types/mocha": "^5.2.7",
"@types/node": "^11.13.17",
"chai": "^4.2.0",
"chai-as-promised": "^7.1.1",
"graphviz": "0.0.9",
"minimist": "^1.2.0",
"mocha": "^6.1.4",
"npm-failsafe": "^0.4.1",
"protractor": "^5.4.2",
"protractor-screenshot-utils": "^1.0.3",
"rimraf": "^2.6.3",
"serenity-cli": "^0.11.3",
"serenity-js": "^1.10.13",
"ts-node": "^8.3.0",
"tslint": "^5.18.0",
"typescript": "^3.5.2",
"typescript-logging": "^0.6.3",
"yargs": "^13.2.4"
}
应该很简单,var obj = new Class()
对吧?那不行。
题中包含的代码不够,看不出是什么问题。但是根据可以收集到的任何信息,您正在使用 async/await 并且量角器承诺管理器设置为 false。
如果是这种情况,那么预计您必须自己处理异步,无论是在构造函数、方法等中的任何地方。
该错误仅表示您在某处拥有本质上是异步的代码,并且未处理生成的 Promise。我建议查找作为 new HomePage()
.
的一部分执行的所有代码
此外,只需快速浏览一下代码,找出任何此类未处理承诺的情况。
希望对您有所帮助...
我正在将 typescript 与 Protractor 和 mocha 一起使用。基本上尝试 运行 一个将经过多个页面的测试。我正在尝试使用 POM,但在使用继承时无法实例化对象。
当我尝试创建新对象时出现以下错误:
UnhandledPromiseRejectionWarning: TypeError: HomePage_1.HomePage is not a constructor
我可以实例化一个 class 的对象,但它不会从任何其他 class 扩展(下面的导航对象没有问题)。我在这里尝试了类似问题的各种建议,但其中 none 似乎有效。
这是我的测试class:e2e.ts
import { browser } from 'protractor';
import { Navigation } from './core/Navigation';
import { HomePage } from './page-objects/HomePage';
var nav = new Navigation(); // <-- SUCCESS NO PROBLEMS
var hmPg = new HomePage(); // <-- FAILS HERE
describe('Add product to cart',async function() {
it("start from homepage", async function() {
nav.navigate("index");
});
it("Perform search", async function() {
hmPg.search("monopoly board game");
});
//some more tests here till adding the product to cart
});
首页class:HomePage.ts
import {browser, element, protractor} from 'protractor';
import { BasePageObject } from './BasePageObject';
export class HomePage extends BasePageObject{
private EC = protractor.ExpectedConditions;
private map;
constructor(){
super();
super.loadMap(process.cwd()+"\page-objects\homePage.json");
}
public search(product:string){
//some stuff here
}
//some more methods here.
}
这是我的 BasePageObject.ts class:
//some imports here
export class BasePageObject{
//to store parsed json
public mapData;
public mapPath:string;
public contentData;
public contentPath:string;
constructor(){
//nothing to do here. Just setting the logger.
log = factory.getLogger("BasePageObject");
}
//some other methods here
}
这是我的 tsconfig.json
{
"compileOnSave": true,
"compilerOptions": {
"baseUrl": ".",
"module": "commonjs",
"paths": { "*": ["types/*"] },
"outDir": "./dist/out-tsc",
"mapRoot": "./dist/out-tsc/",
"esModuleInterop": true,
"sourceMap": true,
"declaration": false,
"moduleResolution": "node",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"allowSyntheticDefaultImports": true,
"target": "es6",
"typeRoots": [
"node_modules/@types",
]
}
}
这也是我测试运行ning tsc后生成的js文件class:
Object.defineProperty(exports, "__esModule", { value: true });
var protractor_1 = require("protractor");
var Navigation_1 = require("./core/Navigation");
var HomePage_1 = require("./page-objects/HomePage");
var nav = new Navigation_1.Navigation();
var hmPg = new HomePage_1.HomePage(); <--- FAILS HERE
describe('Add product to cart', function () {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
this.timeout(90000);
it("start from homepage", function () {
return __awaiter(this, void 0, void 0, function () {
....
...
..
.
这是我在 package.json 中的依赖项:
"dependencies": {
"@types/mocha": "^5.2.7",
"@types/node": "^11.13.17",
"chai": "^4.2.0",
"chai-as-promised": "^7.1.1",
"graphviz": "0.0.9",
"minimist": "^1.2.0",
"mocha": "^6.1.4",
"npm-failsafe": "^0.4.1",
"protractor": "^5.4.2",
"protractor-screenshot-utils": "^1.0.3",
"rimraf": "^2.6.3",
"serenity-cli": "^0.11.3",
"serenity-js": "^1.10.13",
"ts-node": "^8.3.0",
"tslint": "^5.18.0",
"typescript": "^3.5.2",
"typescript-logging": "^0.6.3",
"yargs": "^13.2.4"
}
应该很简单,var obj = new Class()
对吧?那不行。
题中包含的代码不够,看不出是什么问题。但是根据可以收集到的任何信息,您正在使用 async/await 并且量角器承诺管理器设置为 false。
如果是这种情况,那么预计您必须自己处理异步,无论是在构造函数、方法等中的任何地方。
该错误仅表示您在某处拥有本质上是异步的代码,并且未处理生成的 Promise。我建议查找作为 new HomePage()
.
此外,只需快速浏览一下代码,找出任何此类未处理承诺的情况。
希望对您有所帮助...