cypress: How can manage the application flow, if the element xpath is not present

回眸只為那壹抹淺笑 提交于 2021-01-28 01:11:14

问题


I have the following scenario:

if the element is present, i have to do one activity and if not present will do another activity.


  cy.xpath("//div[text()= 'button').its('length').then(res=> {
 
  if (res > 0) {
    return 1;
}
else {

cy.log ("Element is not present")

    }
 }
)} '''

if element is present = Code is working fine, 
if the element xpath is not present = it try to search the element xpath (//div[text()= 'button') and throwing the error as 'Timed out retrying: Expected to find element: undefined, but never found it.'

if element is not present, Is there any way, i can handle the code ,

回答1:


When using xpath you can (sort of) make it conditional by wrapping the xpath selector with count().

cy.xpath("count(//div[text()= 'button'])")  // ok with async content
  .then(count => {
    if (count) {

      //return 1;  // not useful, returns a "chainer"
      // ...but you can perform the required test here, e.g
      cy.xpath("//div[text()= 'button']").click()

    } else {
      cy.log('not found')
    }

  })

The shorter syntax using built-in jQuery might be

const exists = !!Cypress.$("div:contains('button')").length

if (exists) {
  cy.xpath("//div[text()= 'button']").click()
} else {
  cy.log('not found')
}

Note that this is a partial match to 'button', where-as the xpath syntax is an exact match.

Also note - using Cypress.$ by-passes retry-ability, so it should not be used where the text is asynchronous.

From docs

This is a great way to synchronously query for elements when debugging from Developer Tools.

The implication is that it's more for debugging after the page has loaded.

The best practice is to try to construct the test and the app's data in such a way that you know that the button is present.




回答2:


You can do something like this. With Cypress.$, you can validate the presence of the element with the help of the length attribute and then do further actions.

cy.get('body').then($body => {

  const ele = $body.find('selector');

  if (Cypress.$(ele).length == 0) {
    //Do Something element is not present
  } 
  
  else if (Cypress.$(ele).length > 0) {
    //Do Something when element is present
  }
  
})


来源:https://stackoverflow.com/questions/64913464/cypress-how-can-manage-the-application-flow-if-the-element-xpath-is-not-presen

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!