Javascript 使用Cypress获取HTML文件中指定的对象

Javascript 使用Cypress获取HTML文件中指定的对象,javascript,cypress,Javascript,Cypress,我试图使用cypress与一个JS库交互,该库将用户界面呈现给DOM。用户通过表示GUI的对象实例与库交互 let editor = new Formr.Editor(...); 上述行位于index.html页面中的标记中。我正在呼叫cy.visit(./index.html)页面加载正常,但使用cy.wrap(编辑器)抱怨editor未定义 我需要访问编辑器实例的原因是在与DOM交互后检查它的状态 如何从cypress中访问编辑器 更新:Richard的建议 所以我试过这个: index.

我试图使用cypress与一个JS库交互,该库将用户界面呈现给DOM。用户通过表示GUI的对象实例与库交互

let editor = new Formr.Editor(...);
上述行位于index.html页面中的
标记中。我正在呼叫
cy.visit(./index.html)
页面加载正常,但使用
cy.wrap(编辑器)
抱怨
editor
未定义

我需要访问
编辑器
实例的原因是在与DOM交互后检查它的状态

如何从cypress中访问
编辑器

更新:Richard的建议

所以我试过这个:

index.html:
const editor=window.editor=new Formr.editor(…)

柏树试验:

it("Should add a row when clicked", () => {
    cy.visit('http://localhost:63342/formr');

    const editor = cy.state('window').editor;

    cy.get("#feditor-add-row-button")
    .click();

    cy.wrap(editor)
        .invoke('Data')
        .its('rows')
        .should('eq', 1);
});

不幸的是,它似乎仍然不起作用。cypress是否足够智能,可以等待
窗口
准备就绪?

在脚本标记中,您可以在窗口上设置对
编辑器
的引用


let editor=new Formr.editor(…);
window.editor=编辑器;
然后在测试中抓住它

const editor=cy.state('window').editor;`。

有关更多详细信息,请参见将Vuex添加到窗口的位置,以使其在测试中可访问

解决方案是使用
。its
与Richard Matsen的建议相结合,将
编辑器
分配给
窗口
变量

cy.window()
    .its('editor.rows.length')
    .should('equal', 2);

似乎不起作用。请参阅我的编辑。而且,我似乎在cypress文档中的任何地方都找不到
state
,我的IDE抱怨它没有定义。。。你确定它存在吗?这对我来说很好。cy.state()用于很多地方,例如代码覆盖率插件。有一个对文档的请求,但是在被接受之前,api可能会改变。