javascript Cypress将URL作为字符串获取,以在后续命令中使用,但不起作用

jecbmhm3  于 2022-12-25  发布在  Java
关注(0)|答案(3)|浏览(145)

我试图在Cypress中获取字符串形式的URL。下面是我的代码:

let schoolDistrictViewLink1 = null;
 cy.url().then(($url) => { schoolDistrictViewLink1 = $url, cy.log($url)})
 cy.log(schoolDistrictViewLink1)

当我运行测试时,第一个日志正确地记录了URL,但是schoolDistrictViewLink1仍然为空。
我无法使schoolDistrictViewLink1等于URL。

i34xakig

i34xakig1#

由于Cypress的异步特性,这将不起作用。Cypress自己建议使用别名来保存值以供以后使用。
https://docs.cypress.io/guides/core-concepts/variables-and-aliases
在这个例子中,你可以把cy.url()的值放在一个别名中,你可以在后面通过cy.get('@aliasName')得到这个别名:
示例:

cy.url().as("schoolDistrictViewLink1");

    // do other things

    // when you need to use the value
    cy.get("@schoolDistrictViewLink1").then((url) => {
      cy.log(url);
    });
0x6upsns

0x6upsns2#

如果您希望立即将命令链接到cy.url,那么您不必做任何事情,只需链接即可。

cy.url()
  .should('eq', 'https://www.website.com/')

如果您想在测试的稍后阶段使用它,可以使用function()this关键字的组合

let url
it('check url', function(){
  cy.url().then( u => url = u)
  // later in your test
  cy.get('selector').should('have.text', this.url)
})
brgchamk

brgchamk3#

    • 问题说明:**

您试图在传递给cy.url()callback函数中将URL的值赋给schoolDistrictViewLink1。这意味着schoolDistrictViewLink1的值只有在回调函数被调用后才会更新,回调函数在cy.url()执行后异步发生。

    • 解决方案:**

您可以使用**async/await**模式等待值更新。

async function getUrl() {
  let schoolDistrictViewLink1 = null;
  await cy.url().then(($url) => { schoolDistrictViewLink1 = $url, cy.log($url)});
  return schoolDistrictViewLink1;
}

const url = await getUrl();
cy.log(url);

快乐编码!

相关问题