用黄瓜执行端到端测试时,“使用定位器找不到元素...”

时间:2019-04-07 00:57:02

标签: javascript protractor cucumber

我在黄瓜的多个功能上遇到以下失败:“ NoSuchElementError:使用定位器未找到任何元素:By(css选择器,h1)”

我尝试设置更大的超时时间,以便给Cucumber更多的时间来查找元素,但这似乎不起作用

以下是测试的主要组成部分: cardTitle.feature:

@cardTitle-feature
Feature: See card title
  Display the card title

  @cardTitle-scenario
  Scenario: Card Page
    Given I am on the card page
    When I do nothing
    Then I should see the card title

app.steps.ts:

// Go to the card - Display the title
Given(/^I am on the card page$/, async () => {
    await page.navigateToCard();
});

When(/^I do nothing$/, () => {
});

Then(/^I should see the card title$/, async () => {
    expect(await page.getCardTitleText()).to.equal('Profile');
});

app.po.ts:

navigateToCard() {
        this.sleep(3000);
        return browser.get('/card');
    }

getCardTitleText() {
        this.sleep(3000);
        return element(by.css('h1')).getText();
    }

card.html:

<div class="profile-container">
  <!-- EXAMPLE TOP NAV -->

  <h1>Profile</h1>
...

我认为可能会发生这种情况,因为如果不登录应用程序,可能无法访问“卡”。如果这是问题,我该如何执行测试以登录到应用程序,然后检查“ h1”元素? 谢谢!

1 个答案:

答案 0 :(得分:0)

伟大的写作!感谢所有细节,这对您有很大帮助。这是我的想法:

  • 您是否不需要v-btn休眠页面对象?或者,如果出于某种原因要避免页面对象中的异步函数,也可以保证将await链接到sleep
  • 鉴于您正在使用量角器,并且大概这是一个有角度的应用程序,我很惊讶您根本不需要睡觉。通常,内置get作为每个waitForAngular的一部分运行,应该等到页面完全加载后再继续
  • 您的CSS看起来很完美,应该可以正常工作。您可以使用CSS找到html标签和属性。
  • 我假设browser.get是页面对象基类中的一种方法?我有点期待this.sleep

顺便说一句,我在量角器的browser.sleep$别名中走了很多路,它们是如此干净。你可以缩短

$$

为了公正

return element(by.css('h1')).getText();

如果您愿意。