我有一个dom元素,其中包含我想访问的字符串或网址。我已经使用数据属性标记了dom元素以便于参考。
在上面以粗体显示“创建主题”的字符串,在控制台中,您可以看到它具有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元素中的文本,以便以后可以使用它来访问网址?
答案 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()