将别名与cypressIO一起使用时出现错误消息
使用时,我收到以下错误消息:“TypeError:无法读取未定义的属性'text'” 我所做的与他们在文档中所做的完全一样: 有人能看出我做错了什么吗将别名与cypressIO一起使用时出现错误消息,cypress,Cypress,使用时,我收到以下错误消息:“TypeError:无法读取未定义的属性'text'” 我所做的与他们在文档中所做的完全一样: 有人能看出我做错了什么吗 beforeEach(() => { cy.visit('http://localhost:4200/'); loginPage.login(); timeFilter.button.click(); cy.get('#title').invoke('text').as('text'); }); i
beforeEach(() => {
cy.visit('http://localhost:4200/');
loginPage.login();
timeFilter.button.click();
cy.get('#title').invoke('text').as('text');
});
it('should show text', () => {
console.log(this.text);
});
文字一直是柏树上的痛。这可能是以下几件事之一: 1) 有时此别名不起作用,请尝试使用:
cy.get('@text')。然后(text=>console.log(text))代码>
2) 如果文本包含在#title
下面的元素中,则必须获取该特定元素。例如,#title
可能是一个div
,其中包含一个h1
元素,因此在这种情况下,您需要使用#title>h1
作为选择器。张贴您的HTML,我将能够告诉如果是这样的情况
3) invoke('text')
几乎不起作用,我不知道为什么。我发现这种方法更有效。cy.get(“#title”)。然后($el=>el.text())
阅读cypress文档,我遇到的问题是使用箭头函数,我没有使用.then()访问闭包中的别名。我一做到这一点,它就起了作用:
cy.get('#title').invoke('text').as('text');
它('应该显示文本',()=>{
cy.get('#main')。然后(函数(){
console.log(this.text);
});
});
或者在it()
回调上使用function()
而不是()=>
cy.get('#title').invoke('text').as('text');
它('应该显示文本',函数(){
console.log(this.text);
});
这是可行的,但只要我尝试将el.text()赋值给一个变量,并在链之外访问它,我就会得到未定义的值<代码>变量文本
cy.get('#title')。然后($el=>text=el.text())
console.log(text)
,这是因为cypress是异步的。将尝试使用文本变量的代码移动到块中。然后()。或者将其设置为before()
或beforeach()
块中的text
变量-这些变量将在测试开始之前完成执行。您找到了主要问题-在it()
回调中使用function()
而不是()=>
解决了问题,正如Cypress文档所示。