赛普拉斯:无法从Ajax调用中选择选项

时间:2018-08-23 07:34:38

标签: ajax cypress

很抱歉问这个。我在使用柏树时比较陌生。 我有两个选择。 #firstSelect和#secondSelect。

  • #firstSelect选项将在使用时使用ajax填充 document.ready
  • #secondSelect选项将在firstSelect获得一个 值。

起初我尝试使用静态值,例如

cy
.get("#firstSelect").select('1')
.get("#secondSelect").select('2')

这很好,但是当我动态放置值时。

cy.server()
cy.route('POST', 'url').as("secondSelect")

cy.get("#firstSelect").each( ($el, idxFs) => {

  cy.get('#firstSelect').select($el.get(0).value)
    .wait('@secondSelect').then( function(xhr) {
    //code in selecting a value for the secondSelect
    }
})

能够在firstSelect中选择一个值。
在动态方面我做错了什么?
对于这种情况,任何其他方法都将提供巨大帮助!谢谢!

1 个答案:

答案 0 :(得分:0)

听起来您只需要断言发生了以下事情,并且它是按顺序发生的:

1)已填充#firstSelect

2)发生了发布请求

3)已填充#secondSelect


这相对简单:

cy.server()
cy.route('POST', 'url').as("updateServer")

// Wait for #firstSelect to be populated, assumes #firstSelect is the surrounding <ul>
cy.get("#secondSelect").children().should("have.length", 10);

// Again, this assumes #firstSelect is the parent
cy.get("#firstSelect").children().each( ($el, idxFs) => {
    // Using .should() here makes Cypress retry the assertion until it succeeds or times out.
    cy.wrap($el).should('equal', 'someVal');
    cy.wrap($el).should($item => {
        expect($item).to.have.property("style");
        //...
    });
});

// Wait for post request. Takes advantage of automatic retries.
cy.wait('@updateServer');

// Wait for #secondSelect to be populated
cy.get("#firstSelect").children().should("have.length", 10);

cy.get("#secondSelect").children().each( ($el, idxFs) => {
    // Perfom assertions on each list item in #secondSelect...
});

可能是我误解了您的问题。如果是这种情况,请编辑您的帖子,其中包含有关特定问题的更多信息和代码。