4

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

在此处输入图像描述

在上面以粗体显示“创建主题”的位置是字符串,在控制台中,您可以看到它有一个data-test='topicUrl属性。

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

我遵循了有关变量和别名的文档并尝试了

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

这样我就可以使用

cy.visit(this.Url)

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

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

4

2 回答 2

3

您可以将其缓存到变量并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(() => {})应该永远工作的(?)。

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

于 2018-03-27T11:22:03.963 回答
1

几天前看到这个问题using-aliases-in-cypressthis.Url ,我不认为语法普遍适用。您引用的文档是指“mochas 共享上下文对象”和“测试之间自动清理别名”。

这使我认为您只能this.Url在在 beforeEach() 中设置别名时使用

你可以试试以下

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

或从 cypress example_spec.js 的第 847 行,

cy.get('[data-test="topicUrl"]').as('Url')
...
cy.get('@Url').click()
于 2018-03-26T07:39:43.443 回答