【发布时间】:2019-03-04 13:36:38
【问题描述】:
我正在使用量角器与黄瓜和 trypescript。我将所有页面对象都定义为类。在步骤定义中,我初始化所需的每个页面对象并将其用于各种断言或操作。运行一个场景时,设置工作正常。但是,如果我想运行更多场景,我需要找到一种方法来重新初始化每个场景的页面对象,否则量角器将使用先前初始化的对象以及为第一个浏览器实例获取的元素,我会得到一个错误。
关于如何做到这一点的任何想法?我试图在 github 上查看项目示例,但找不到任何可以解决我的问题的内容。
这是我设置中的一个小例子:
loginpage.po.ts:
export class LoginPage{
...
async login(username:string,password:string){
await this.enteremail(username);
await this.clickNext();
await this.enterPass(password);
await this.clickSignIn();
...
}
}
common.steps.ts:
import { LoginPage} from '../pageobjects/loginPage.po';
...
var loginPage: LoginPage= new LoginPage();
Given('I have the URL ', async () => {
await browser.get(config.baseUrl);
await expect(loginPage.isAtSignIn()).to.eventually.be.true;
});
Given ('I login', async () => {
await loginPage.login(config.params.username, config.params.password);
});
【问题讨论】:
-
您的方法看起来是正确的。请显示您遇到的错误。
-
在运行两个场景时,我收到第二个场景的以下错误:“NoSuchSessionError: This driver instance does not have a valid session ID (d did you call WebDriver.quit()?) and may不再使用。”如果我在“Given”函数中移动 LoginPage 的初始化,这两种情况都会通过。但是,想知道是否有更优雅的方法来执行此操作,而不是在步骤定义中初始化页面对象(因为当我想重用其他扫描仪中的某些步骤时,这种方法可能会导致问题)
-
检查您的代码以查看您在钩子后或第一个场景的最后一步关闭浏览器会话。喜欢打电话
browser.quite()。或者在量角器conf.js中设置restartBrowser -
是的,我在 hooks.ts 中有这个,并且从日志中可以看到它被执行:After(async () => { await browser.quit(); });跨度>
-
如果在每个场景后关闭浏览器不是强制选项,请将其从 after hook 中删除。
标签: typescript protractor cucumber pageobjects