จะรอให้การเรียก api เสร็จสิ้นแล้วตรวจสอบว่ามีองค์ประกอบที่ใช้ cypress ได้อย่างไร

ฉันยังใหม่กับ cypress และฉันกำลังพยายามตรวจสอบว่ามีองค์ประกอบอยู่ในหน้าหรือไม่เมื่อการเรียก api เสร็จสิ้น

ฉันโพสต์ http ไปที่ url 'things/thing1' และเมื่อ api นี้เสร็จสิ้น ฉันต้องการตรวจสอบว่ามีองค์ประกอบ span อยู่ในหน้าหรือไม่

ฉันได้ลองบางอย่างด้านล่างแล้ว

const setUp = () => {
    cy.apiPatchSomethings(something1)
        .then(() => {
            cy.reload();
        });
}

describe('Suite name', () => {
    before(() => {
        setUp();
    });
    it('test case', () => {
        cy.contains('span');
    }
});

รหัสข้างต้นใช้งานไม่ได้ ก่อนที่จะเห็นองค์ประกอบ span บนหน้าเว็บจะตรวจสอบองค์ประกอบ span

ถ้าฉันใช้ cy.wait(10,000) เหมือนด้านล่างมันก็ใช้งานได้

it('test case', () => {
    cy.wait(10000);
    cy.contains('span');
});

แต่ฉันไม่ต้องการใช้ cy.wait มีวิธีอื่นในการแก้ปัญหานี้หรือไม่ ใครก็ได้ช่วยฉันด้วยเรื่องนี้ ขอบคุณ.


person stackuser    schedule 07.01.2021    source แหล่งที่มา
comment
cy.apiPatchSomethingsคืนสัญญาหรือไม่?   -  person Jonah    schedule 08.01.2021


คำตอบ (2)


คำสั่ง Cypress cy.contains() เมื่อเรียกด้วยอาร์กิวเมนต์เดียวคือ กำลังมองหาเนื้อหา

ไวยากรณ์
cy.contains(content)
cy.contains(content, options)
cy.contains(selector, content)
cy.contains( ตัวเลือก เนื้อหา ตัวเลือก)

แต่ฉันเดาว่าคุณกำลังมองหาองค์ประกอบ span ดังนั้นให้ใช้

cy.get('span')

or

cy.contains('span', 'my-content-in-span')

สมมติว่าไม่ใช่ปัญหา เป็นเพียงโค้ดตัวอย่างที่กำหนดเองบางส่วน...

คุณสามารถแก้ไขฟังก์ชันการตั้งค่าเพื่อคืนสัญญาเพื่อรอการโหลดซ้ำได้

const setUp = () => {
  return cy.apiPatchSomethings(something1)     // need a return here
    .then(() => {
      return new Cypress.Promise(resolve => {  // inner return also
        cy.reload()
        resolve(true)                          // resolve will signal reload is finished
      })
    });
}

เนื่องจากมีการเรียกใช้ setup() ภายใน before() Cypress จะรอให้คำสัญญาได้รับการแก้ไขก่อนดำเนินการต่อ

โปรดอย่าเพิ่มการรอหรือการหมดเวลาเพิ่มเติม ซึ่งเป็นการเสนอแนะบ่อยเกินไป สิ่งนี้จะนำไปสู่การทดสอบที่ไม่สม่ำเสมอเท่านั้น

หมายเหตุ หากคุณไม่รังเกียจที่จะทิ้งฟังก์ชัน setup() มันจะง่ายกว่ามาก

describe('Suite name', () => {

  before(() => {
    cy.apiPatchSomethings(something1)
      .then(() => cy.reload() );      // all commands here will be completed
                                      // before the tests start
  });

  it('test case', () => {
    cy.contains('span', 'my-content-in-span');
  }
});
person Community    schedule 08.01.2021

1.คุณสามารถรอให้ span มองเห็นได้ การหมดเวลาเริ่มต้นที่ cypress ให้ไว้คือ 4 วินาที

cy.contains('span').should('be.visible')

2. หากคุณต้องการกำหนดเวลาหมดเวลาแบบกำหนดเอง (เช่น 10 วินาที) เฉพาะสำหรับคำสั่งนี้ คุณสามารถใช้:

cy.contains('span', { timeout: 10000 }).should('be.visible')

3.หากคุณต้องการเพิ่มการหมดเวลาทั่วโลก ให้พูดถึงสิ่งนี้ในไฟล์ cypress.json ของคุณ:

"defaultCommandTimeout": 10000

แล้วใช้:

cy.contains('span').should('be.visible')

ตอนนี้คำสั่งทั้งหมดของคุณจะมีการหมดเวลาเริ่มต้นเป็นเวลา 10 วินาที

person Alapan Das    schedule 08.01.2021