[英]Using CucumberJS / Puppeteer, how do you extend the Page object with multiple scenarios?
我正在使用Puppeteer和CucumberJS編寫測試自動化套件。
我遇到一個問題,即在功能文件中的場景之間未傳遞Page對象。
Test_1.features
Feature: Login and hit some buttons
In order to show my issue
As a stackOverflow users
I want be able to login and select some buttons
Scenario: Log in
Given I have navigated to to the App "foobar"
When I have selected the Imports button
I should see the Console on the page title
When I have selected the Imports button
Then I should see the Imports on the page title
Test_2.features
Feature: Login and hit some buttons
In order to show my issue
As a stackOverflow users
I want be able to login and select some buttons
Scenario: Log in
Given I have navigated to to the App "foobar"
When I have selected the Imports button
I should see the Console on the page title
Scenario: Navigate from the Imports page/list to the Console
When I have selected the Imports button
Then I should see the Imports on the page title
我有一個world.js
'use strict';
const { setWorldConstructor } = require("cucumber");
const puppeteer = require("puppeteer");
class thisApp {
constructor() {
this.app = "";
}
// Open browser
async openBrowser() {
this.browser = await puppeteer.launch({
headless: false,
slowMo: 25
});
this.page = await this.browser.newPage();
}
async appLogIn(username_password) {
await this.page.waitFor(settings._3000);
await this.navigateToAppLoginPage();
await this.appEnterUsernamePassword(username_password);
await this.page.click('[data-test-button-SignIn="true"]');
await this.page.waitFor(settings._3000);
}
// Select the Imports button
async selectButtonNavigationPaneImports() {
await this.page.click('[data-test-button-navigation-pane-imports="true"]');
}
// Select the Console button
async selectButtonNavigationPaneConsole() {
await this.page.click('[data-test-button-navigation-pane-console="true"]');
}
}
setWorldConstructor(ePayApp);
我並沒有把所有步驟都放在那兒-我只是想舉一個例子。
app_steps.js
// Login
Given(/^I have navigated to to the App "([^"]*)"$/, async
function(username_password){
return this.appLogIn(username_password);
});
// import button
When(/^I have selected the Imports button$/, async
function(){
return this.selectButtonNavigationPaneImports();
});
// console button
When(/^I have selected the Console button$/, async
function(){
return this.selectButtonNavigationPaneConsole();
});
我有index.js
const { BeforeAll, Before, AfterAll, After } = require('cucumber');
const puppeteer = require('puppeteer');
Before(async function() {
const browser = await puppeteer.launch({ headless: false, slowMo: 50 });
this.browser = browser;
this.page = page;
})
現在,當我在一種情況下擁有所有步驟(Test_1.features)時,它可以工作。 將測試分為多個場景(Test_2.features)時,我得到:
TypeError: Cannot read property 'click' of undefined
這使我相信在第二種情況下不會訪問頁面對象。
我究竟做錯了什么?
使用2個場景,您將擁有完全不同的World對象。 您在第一種情況下啟動的成員將在第二種情況的掛鈎函數中重新創建,這可能是造成問題的原因。
每個方案都將執行“ Before”掛鈎,因此每個方案中都有兩個不同的瀏覽器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.