0

我正在尝试使用 Jest 和 Playwrigt 构建基于 POM 的框架。附上linkedin的示例代码,而发送键的行为是有线的,它将在电子邮件字段中输入邮件文本中的几个字符,并在密码字段中输入剩余的电子邮件字符和密码字符。即使我尝试过slowMo arg。下面是代码片段。

const { chromium } = require('playwright');

class BrowserSession {
    async startTest(domain, headlessStatus) {
        this.browser = await chromium.launch({ headless: headlessStatus, args: ['--start-maximized'] })
        let context = await this.browser.newContext({ viewport: null });
        this.page = await context.newPage();
        this.navigationPromise = this.page.waitForNavigation()
        await this.page.goto(domain, { waitUntil: 'networkidle' });
    }
    
    async endTest() {
        await this.browser.close();
    }

    async pageOperation(){
        return this.page
    }

    async pageNavigationPromise(){
        return await this.navigationPromise
    }

}
module.exports = new BrowserSession

const BrowserSession = require("./browser.session")

class PageActions {

    async setValue(element, value) {
        (await BrowserSession.pageOperation()).type(element, value)
    }

    async clickOnElement(element) {
        (await BrowserSession.pageOperation()).click(element)
    }
    async navigatePromise() {
        (await BrowserSession.pageNavigationPromise())
    }
}

module.exports = new PageActions

const linkedInLocator = require('../locators/linkedIn.locator');
const PageActions = require('../util/page.action')

class LinkedInPage {
   
    async joinLinkedIn(email, password) {
        console.log('----email-----',email,password)
        await PageActions.clickOnElement(linkedInLocator.JOIN)
        await PageActions.navigatePromise()
        await PageActions.setValue(linkedInLocator.EMAIL, email)
        await PageActions.setValue(linkedInLocator.PASSWORD, password)
        await PageActions.clickOnElement(linkedInLocator.AGREE)
    }
}

module.exports = new LinkedInPage

const BrowserSession = require('../util/browser.session')
const LinkedInPage = require('../pages/linkedIn.page')

describe('E2E test as an end-user, perform the tests below:', () => {
    it("As an end-user, I will Agree & Join Linked in",
        async () => {
            await BrowserSession.startTest('https://www.linkedin.com/', false)
            await LinkedInPage.joinLinkedIn('test@email.com', 'stackover')
        }
    );
},
);

exports.JOIN = '//a[text()="Join now"]';
exports.EMAIL = '#email-or-phone';
exports.PASSWORD = '#password';
exports.AGREE = '#join-form-submit';

在 LinkedInPage.class 中,我试图为电子邮件(例如:)test123@gmail.com和密码(例如:)设置值test123。该脚本在电子邮件字段中输入几个字符(例如test:),在密码字段中输入剩余字符(例如:)@gmail.com123。我无法弄清楚为什么会这样。

4

0 回答 0