获取一个字符串以用于 cypress 中的 .visit() 调用

Grab a string to use in a .visit() call in cypress

我有一个 dom 元素,其中包含我想访问的字符串或 url。我已经用数据属性标记了 dom 元素以便于参考。

上面粗体显示 'Create Topic' 的地方是字符串,在控制台中,您可以看到它有一个 data-test='topicUrl 属性。

我想捕获这个字符串值,以便稍后访问 url。

我关注了 the docs on Variables and Aliases 并尝试了

cy.get('[data-test="topicUrl"]').invoke('text').as('Url')

以便我可以使用

访问该页面
cy.visit(this.Url)

但这不起作用,它在控制台中出现 TypeError: Cannot read property 'Url' of undefined 错误。

如何抓取 DOM 元素中的文本以便稍后可以使用它访问 url?

看到这个问题 几天前,我认为 this.Url 语法不是通用的。您引用的文档是指 'mochas shared context object' 和 'aliases are automatically cleaned up between tests'。

这让我认为当在 beforeEach() 中设置别名时,您可以 仅使用 this.Url

您可以尝试以下方法

cy.get('[data-test="topicUrl"]').invoke('text').as('Url')
...
cy.get('@Url').then(url => cy.visit(url))

不过,这感觉更像是点击而不是访问,因为 url 看起来相对于当前站点。

cy.get('[data-test="topicUrl"]').click()
cy.wait(100)  // a wait might be needed

或来自柏树的第847行example_spec.js、

cy.get('[data-test="topicUrl"]').as('Url')
...
cy.get('@Url').click()

您可以将其缓存到变量中并在回调中发出 cy.visit 以确保填充变量:

let url;
cy.get('[data-test="topicUrl"]').invoke('text')
    .then( value => {
        url = value;
    });

cy.then(() => {

    return cy.visit(url);
});

直接使用 cy.then()(而不是将它与另一个命令链接起来)没有记录在案,将来可能会在实施 cy.resolve( promise ) 时删除。

也许最好使用 cy.wrap().then(() => {}),它应该永远有效 (?)。

(完全凭记忆,所以让我知道它是否不起作用,我会在有机会 运行 时更新。)