获取一个字符串以用于 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(() => {})
,它应该永远有效 (?)。
(完全凭记忆,所以让我知道它是否不起作用,我会在有机会 运行 时更新。)
我有一个 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(() => {})
,它应该永远有效 (?)。
(完全凭记忆,所以让我知道它是否不起作用,我会在有机会 运行 时更新。)