我正在研究Chrome中的扩展程序,我想知道:什么是找出元素何时出现的最佳方法?使用普通的javascript,检查直到元素存在的间隔,或jQuery有一些简单的方法来做到这一点?
如何检查元素是否存在,以便在元素存在的情况下可以执行某些步骤。否则,如果元素不存在,则可以执行某些不同的步骤。
我尝试了类似下面的方法,但没有奏效:
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')
// ...
// ...
}
});
}
});
});
Run Code Online (Sandbox Code Playgroud)
我正在寻找一个简单的解决方案,它可以与简单的 javascript if else block 或then()部分合并
类似于 Webdriver 协议的以下实现:
driver.findElements(By.yourLocator).size() > 0好心提醒。谢谢
我需要处理我的页面可能在加载阶段显示弹出对话框或可能不出现的情况。单击任意位置都会将其删除,我对测试此对话框不感兴趣,但它阻止了我需要访问的页面,因此必须将其删除
这是在对话框出现时获取对话框的代码
cy.get('.wps_popup')
.find('[data-wps-popup-close]')
.click()
Run Code Online (Sandbox Code Playgroud)
但我不能把它放在测试的顶部,因为这个元素可能不会出现。
如何处理条件元素 - 我是否需要intercept更改 DOM 并将该代码放入事件侦听器中?
使用cypress.io我可以获得与给定 CSS 选择器匹配的 HTML 元素列表,如下所示:
cypress.get(".some-class")
如果class 'some-class'页面上没有找到具有 的元素,则测试失败。这是设计使然。
我想尝试获取上面的 HTML 元素列表,但如果元素数量为 0,则不会导致测试失败。
如何使用 cypress.io 实现此目的?
我的before()挂钩中有以下代码行。
before(() ==> {
cy.get(this.testPopup).then(($el) => {
if ($el.length) {
cy.get(this.testPopupCloseButton).click();
cy.get(this.testPopup).should("not.exist");
}
});
});
Run Code Online (Sandbox Code Playgroud)
会有一个弹出窗口,有时会显示,有时不会。我尝试编写一个逻辑来关闭该弹出窗口,并检查仅当弹出窗口存在时它是否在关闭时消失。
但我收到以下错误。
30000 毫秒后超时重试:期望找到元素:#test-popup-element,但从未找到。
由于此错误发生在 before all 挂钩期间,我们将跳过当前套件中的其余测试`
我基本上期望这里有一个软断言,即使该断言失败,它将继续运行其余的测试。
请指教。
我试图将断言传递给 if 条件,并在满足条件时执行一个逻辑,在条件失败时执行另一个逻辑。
由于测试因断言失败而失败,我无法达到预期的结果。
我尝试了以下...
if(cy.get("div").length \> 0) {
cy.log("print this")
} else {
cy.log("print this")
}
Run Code Online (Sandbox Code Playgroud)
或者
if(cy.get("div").should('have.length.greaterThan', 0) {
cy.log("print this")
} else {
cy.log("print this")
}
Run Code Online (Sandbox Code Playgroud)