我正在尝试使用 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
。我无法弄清楚为什么会这样。