为赛普拉斯创建静态内容选择器

时间:2019-01-30 22:20:31

标签: javascript cypress

我们正在从GEB / Spock转向赛普拉斯,以实现前端自动化。使用GEB / Spock,页面对象具有静态内容。这用于创建页面对象的选择器。

class LoginPage extends Page {
//private static Logger log = LoggerFactory.getLogger(LoginPage.class);


static url = 'login/'
static at = { title == "Login to TalentBank"}
static content = {
    backgroundImage { $("div [style*=\"background-image\"]") }
    logo { $(".center-img img") }
    emailHeader { $("#emailGroup:not([style*=\"none\"]) label") }
    emailTextBox { $('#emailGroup:not([style*="none"]) #email') }
    nextButton { $('#loginWithEmail') }
    pwdHeader { $("#passwordGroup:not([style*=\"none\"]) label") }
    pwdTextBox { $("#passwordGroup:not([style*=\"none\"]) #password") }
    loginButton { $("#loginWithPassword") }
    loginError(wait: true) { $("#loginError") }

在赛普拉斯中,我不确定在哪里创建和调用这些对象。选择器应该被创建为固定装置还是支持文件?我已经阅读了赛普拉斯的文档,但是找不到我想要的东西。

编辑:2/4

在支持下,我尝试创建一个包含对象的LoginPage.js文件

// Login Page Objects
const emailTextBox = $('#emailGroup:not([style*="none"]) #email');

我的测试在集成目录下。我在测试中使用新常数。我的IDE中没有错误,因为测试似乎可以找到Ctrl + Space代码完成中显示的常量。

describe('Successfull log in to the System', function() {

    it('Standard User - Successful log in ', function() {
       cy.get(emailTextBox).type('RodneyRuxin@mailinator.com')

但是,当我运行测试时,出现错误消息

  

ReferenceError:未定义emailTextBox

1 个答案:

答案 0 :(得分:1)

好的,这些是与以下对象进行交互的不同选择器:

我会推荐一个完全不同的类,然后将其导入? 例如,一个名为locators.js的文件

其中包含:

export const backgroundImage = () => cy.get("div [style*=\"background-image\"]");

然后在另一个文件中,您可以像这样导入它:

import * as locators from "../locators/locators.js";

并这样称呼它(示例):

locators.backgroundImage()
    .should('be.visible')
    .click();

希望这会有所帮助!