抓住一个字符串,用于cypress

时间:2018-03-26 03:21:20

标签: testing cypress

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

enter image description here

在上面以粗体显示“创建主题”的字符串,在控制台中,您可以看到它具有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元素中的文本,以便以后可以使用它来访问网址?

2 个答案:

答案 0 :(得分:1)

您可以将其缓存到变量并在回调中发出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(() => {})(?)。

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

答案 1 :(得分:0)

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

这让我认为,当在beforeEach()

中设置别名时, 只能使用this.Url

您可以尝试以下

cy.get('[data-test="topicUrl"]').invoke('text').as('Url')
...
cy.get('@Url').then(url => cy.visit(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()