代码之家  ›  专栏  ›  技术社区  ›  urig

为什么柏树找不到我的H1元素?

  •  0
  • urig  · 技术社区  · 6 年前

    Cypress.io 3.2.0版。我的一个测试步骤是这样实现的:

    cy.get('h1#feed_header_id').contains('אביזרי');  //('אביזרי' is in Hebrew)
    

    当我在Cypress GUI中运行测试时,它在CONTAINS步骤上失败。但当我点击 CONTAINS 在日志中,快照清楚地显示 H1 其中有“×××××××××”字样的元素。

    截图:

    请注意:元素是: <h1 id="feed_header_id">אביזרי רכב</h1>

    当元素和文本清晰可见时,为什么Cypress无法在元素中找到文本?

    0 回复  |  直到 6 年前
        1
  •  1
  •   Richard Matsen    6 年前

    您可以使用备用的“contains”命令,

    cy.contains('#feed_header_id', 'אביזרי');
    

    原因是 cy.get(...).contains(...) 不等待异步 .

    这个 get() 部分具有自动重试功能,但id选择器是在html中硬编码的,因此 获取() 立即成功(在xhr返回其值之前),然后测试元素的内容(最初为空)。

    上面的替代语法将自动重试应用于选择器和内容。

    规范-包含-rtl.js

    describe('contains', () => {
      it('waits for content', () => {
        cy.visit('app/hebrew-calendar.html').then(x => console.log('x', x))
        // cy.get('h1#feed_header_id').contains('כ״ט בְּאִיָּר תשע״א');
        cy.contains('h1#feed_header_id', 'כ״ט בְּאִיָּר תשע״א');
      })
    })
    

    示例页-hebrew-calendar.html

    <h1 id="feed_header_id"></h1>
    
    <script>
      var xhr = new XMLHttpRequest();
      xhr.open('GET', 'https://www.hebcal.com/converter/?cfg=json&gy=2011&gm=6&gd=2&g2h=1', true);
    
      xhr.onload = function () {
        const hebrewDate = JSON.parse(xhr.response).hebrew;
        const el = document.querySelector('h1#feed_header_id');
        el.textContent = hebrewDate;
      };
    
      xhr.send(null);
    </script>
    
        2
  •  0
  •   Payel Roy Burman    6 年前

    可能有多个具有相同文本的元素。 尝试 cy.get('#feed_header_id').find('h1').contains('אביזרי');

        3
  •  0
  •   Dudi Boy    6 年前

    我强烈怀疑是测试工具造成的。

    我建议尝试:

    cy.get('h1#feed_header_id').contains('ירזיבא');