[![Write WEB UI Auto Test with Cypress](https://flow-prompt-covers.s3.us-west-1.amazonaws.com/icon/minimalist/mini_3.png)](https://gptcall.net/chat.html?data=%7B%22contact%22%3A%7B%22id%22%3A%22VL_M3sWdap03M_xuJhiNh%22%2C%22flow%22%3Atrue%7D%7D) # Write WEB UI Auto Test with Cypress | [Start Chat](https://gptcall.net/chat.html?data=%7B%22contact%22%3A%7B%22id%22%3A%22VL_M3sWdap03M_xuJhiNh%22%2C%22flow%22%3Atrue%7D%7D) write web ui auto test with cypress # Prompt ``` Use Page Object Pattern to write UI auto script with wdio framework,Javscript ES5 for the web "https://angular.realworld.io" let it run on the ios simulator use let not var create user.json file to save username "qiaotl@163.com" and password "123456" like this code let LoginPage = { async goToSign() { await $('input[type="email"]').setValue(username) } } module.exports=LoginPage create newArticalPage.js create setttingPage.js create loginPage.js create shouldPublishArticleSuccessfully.cy.js,use "()=>" test step is 1.Open the "https://angular.realworld.io" website 2.click sign in menu 3.input username and password which read from user.json file 4.click sign in button 5.go to New Article page 6.publish Article 7.go to Setting page 8.logout ``` ## Conversation **ASSISTANT**: loginPage.js: const userData = require('./user.json'); let LoginPage = { get email() { return $('input[type="email"]'); }, get password() { return $('input[type="password"]'); }, get signInButton() { return $('.btn-primary'); }, async goToSignIn() { await $('a[href="#/login"]').click(); }, async signIn() { await this.email.setValue(userData.username); await this.password.setValue(userData.password); await this.signInButton.click(); } }; module.exports = LoginPage; newArticlePage.js: let NewArticlePage = { get title() { return $('input[ng-model="$ctrl.article.title"]'); }, get description() { return $('input[ng-model="$ctrl.article.description"]'); }, get articleBody() { return $('textarea[ng-model="$ctrl.article.body"]'); }, get tags() { return $('input[ng-model="$ctrl.tagField.model"]'); }, get publishButton() { return $('button[ng-click="$ctrl.submit()"]'); }, async createArticle(article) { await this.title.setValue(article.title); await this.description.setValue(article.description); await this.articleBody.setValue(article.articleBody); await this.tags.setValue(article.tags); await this.publishButton.click(); } }; module.exports = NewArticlePage; settingPage.js: let SettingsPage = { get logoutButton() { return $('button.logout'); }, async logout() { await this.logoutButton.click(); } }; module.exports = SettingsPage; shouldPublishArticleSuccessfully.cy.js: const userData = require('./user.json'); const LoginPage = require('./loginPage'); const NewArticlePage = require('./newArticlePage'); const SettingsPage = require('./settingPage'); describe('Publish Article', () => { it('should publish article successfully', () => { LoginPage.goToSignIn(); LoginPage.signIn(); const article = { title: 'Test Article', description: 'This is a test article', articleBody: 'Lorem ipsum dolor sit amet', tags: 'test' }; NewArticlePage.createArticle(article); browser.url('https://angular.realworld.io/#/settings'); SettingsPage.logout(); }); });