如何检查元素是否存在,以便在元素存在时可以执行某些步骤。如果元素不存在,则可以执行某些其他不同的步骤。
我尝试了以下类似方法,但是没有用:
Cypress.Commands.add('deleteSometheingFunction', () => {
cy.get('body').then($body => {
if ($body.find(selectors.ruleCard).length) {
let count = 0;
cy.get(selectors.ruleCard)
.each(() => count++)
.then(() => {
while (count-- > 0) {
cy.get('body')
...
....
}
});
}
});
});
我正在寻找一个简单的解决方案,可以将其与简单的javascript结合使用 如果是其他人阻止或承诺的 then()部分
类似于Webdriver协议的以下实现:
1)driver.findElements(By.yourLocator).size() > 0
2)或检查等待中元素的状态
请告知。谢谢
答案 0 :(得分:3)
cypress的所有步骤都是async,因此您应该在命令文件或页面目标文件中设置通用功能,..
export function checkIfEleExists(ele){
return new Promise((resolve,reject)=>{
/// here if ele exists or not
cy.get('body').find( ele ).its('length').then(res=>{
if(res > 0){
//// do task that you want to perform
cy.get(ele).select('100').wait(2000);
resolve();
}else{
reject();
}
});
})
}
// here check if select[aria-label="rows per page"] exists
cy.checkIfEleExists('select[aria-label="rows per page"]')
.then(e=>{
//// now do what if that element is in ,,..
})
.catch(e=>{
////// if not exists...
})
答案 1 :(得分:2)
它曾经被问过:Conditional statement in cypress
因此,您基本上可以尝试以下方法:
cy.get('header').then(($a) => {
if ($a.text().includes('Account')) {
cy.contains('Account')
.click({force:true})
} else if ($a.text().includes('Sign')) {
cy.contains('Sign In')
.click({force:true})
} else {
cy.get('.navUser-item--account .navUser-action').click({force:true})
}
})
答案 2 :(得分:2)
我要补充一点,如果您决定通过检查for (int i = 0; i < 5; i++) {
if (i == 0 || i == 4) //1st and 5th rows
printf("%d %d\n", i + 1, i + 13);
else if(i == 1 || i == 3)//2nd and 4th rows
printf("%d %d %d %d\n", i + 1, i + 5, i + 9, i + 13);
else
printf("3 7 9 11 15\n");//3rd row
}
命令的.length
属性来确定是否满足条件,则需要尊重cypress的异步特性。
示例: 尽管存在appDrawerOpener按钮,但以下条件的结果仍为false
cy.find
但是此评估为true,因为 if (cy.find("button[data-cy=appDrawerOpener]").length > 0) //evaluates as false
变量已经在您位于promise的$body
部分时被解析:
.then()
答案 3 :(得分:0)
使用异步/等待给出了一种简洁的语法:
const $el = await cy.find("selector")
if ($el.length > 0) {
...
此处有更多信息:https://medium.com/@NicholasBoll/cypress-io-using-async-and-await-4034e9bab207