如何使用cypress从数据表中获取值?
我想从datatable中获取“Created On Date”,以确定它属于哪个时区 我正在使用筛选器搜索特定的活动。但我不确定如何从数据表中提取文本如何使用cypress从数据表中获取值?,cypress,Cypress,我想从datatable中获取“Created On Date”,以确定它属于哪个时区 我正在使用筛选器搜索特定的活动。但我不确定如何从数据表中提取文本 cy.get('input[placeholder="Filter..."]:nth(2)').type("campaign1"); cy.get("tbody") .contains("campaign1") .closest("tr") .should("contain.text", th
cy.get('input[placeholder="Filter..."]:nth(2)').type("campaign1");
cy.get("tbody")
.contains("campaign1")
.closest("tr")
.should("contain.text", this.Advertiser)
.should("contain.text", this.Brand)
.then(text => {
const rowText = text;
});
}
const txt = [];
cy.get("tbody")
.contains("campaign1")
.parent()
.next("td")
.invoke("text")
.then(x => {
txt.push(x);
});
cy.log((this.txt = txt));
但我得到了Cypress的回应
CypressError: Timed out retrying: expected '<tr.MuiTableRow-root>' to contain text undefined, but the text was 'Advertiser UKBrand UKcampaign14 Nov 2019'
CypresError:超时重试:预期“”包含未定义的文本,但该文本为“广告商UKBrand UKAMPATIVATION 2019年11月14日”
如何仅从数据表中提取日期?您的方法是正确的,但搜索不够深入。这将有助于:
cy.get('input[placeholder=“Filter…”):n(2)')。键入(“活动1”);
cy.get(“tbody”)
.包含(“活动1”)
.最近的(“tr”)
.should(“contain.text”,此为广告客户)
.should(“contain.text”,this.Brand)
.查找(“td”)
.eq(5)
。然后(文本=>{
const rowText=文本;
});
您确实找到了正确的行,但没有找到正确的单元格。通过添加
find(“td”)
来搜索单元格。而.eq(5)
实际上选择了第五个出现的td
,这是创建于列的单元格。从您的问题中我可以理解的是,您只需要获取日期值并对其进行断言
假设:应用过滤器后,您总是会得到结果,并且只希望为带有日期的单元格编写测试
这可能会帮助您:
function getTextOfCell(rowIndex){
cy
.get('tbody.MultiTableBody-root')
.get('tr.MultiTableRow-root')
.eq(rowIndex)
.find('td').eq(3).invoke('text').then((txt)=>{
cy.log(txt)
})
}
describe('Test Test', ()=>{
it('Test Test', ()=>{
cy.visit('yourURl')
cy.get('tbody.MultiTableBody-root tr.MultiTableRow-root').its('length').then((rowLength)=>{
for(let i=0; i<rowLength; i++){
getTextOfCell(i)
}
});
})
})
函数getTextOfCell(行索引){
赛义德
.get('tbody.MultiTableBody root')
.get('tr.MultiTableRow-root')
.eq(行索引)
.find('td').eq(3).调用('text')。然后((txt)=>{
cy.log(txt)
})
}
描述('测试',()=>{
它('测试',()=>{
cy.visit('yourURl')
cy.get('tbody.MultiTableBody-root tr.MultiTableRow-root')。其('length')。然后((rowLength)=>{
对于(设i=0;i问题在于
this。当调用should
函数时,广告商
是未定义的。您没有提供初始化此成员的代码段,但我猜它是在内部初始化的,然后或者它是一个属性。无论如何,与大多数Cypress方法一样,当调用should
时,它会esn实际上不执行验证,但只将稍后将执行的命令排队以执行验证。这意味着当调用should
时,This。广告商仍然未定义,这将作为参数传递给should
函数,即使should
函数mmand稍后执行,此。广告客户
具有有效值
解决方案应该是,不要使用this.Advertiser
,而是将问题中出现的整个代码块放在then
块中,this.Advertiser
的值在该块中初始化,并使用传递给该then
块的参数。它应该是这样的:
cy.somethingThatProvidesAdvertiser().then(advertiser => {
cy.get('input[placeholder="Filter..."]:nth(2)').type("campaign1");
cy.get("tbody")
.contains("campaign1")
.closest("tr")
.should("contain.text", advertiser)
.should("contain.text", this.Brand)
.find("td")
.eq(5)
.then(text => {
const rowText = text;
});
});
我想你应该对this.Brand做同样的操作,这意味着你应该嵌套2个然后子句
我希望我能解释得足够清楚…谢谢大家的回复。下面的代码帮助我从数据表中获取所需的值
cy.get('input[placeholder="Filter..."]:nth(2)').type("campaign1");
cy.get("tbody")
.contains("campaign1")
.closest("tr")
.should("contain.text", this.Advertiser)
.should("contain.text", this.Brand)
.then(text => {
const rowText = text;
});
}
const txt = [];
cy.get("tbody")
.contains("campaign1")
.parent()
.next("td")
.invoke("text")
.then(x => {
txt.push(x);
});
cy.log((this.txt = txt));
我建议您在行/列上指定一个cypress专用id,以便轻松提取数据,并且测试更易于维护
<tr data-cy='campaign-${id}' ...>
<td data-cy='created-on'>
....
<td>
</tr>
谢谢J。但我仍然收到相同的错误CypressError:超时重试:预期“”包含未定义的文本,但文本为“Advertiser UKBrand UKAMPATIVATION 2019年11月14日”
Cypress似乎从未到达then()
,但由于一个应失败,已经退出。您能尝试在应之后删除所有内容吗(“contain.text”,this.Advertiser)
。我打赌您的测试仍然会失败。Cypress希望某些内容是“未定义”的,这可能就是this.Advertiser
的值。您还可以将其放入日志()中进行验证,如:cy.log(this.Advertiser)
``cy.get(“tbody”).contains(“活动1”).parent().next(“td”)``标识的'2019年11月4日',但如何获取该值并将其存储在变量中以供将来断言cy.get(“tbody”).contains(“活动1”).parent().next(“td”).invoke(“文本”).as(“txt”);cy.log(this.txt);
返回空值