Javascript &引用;使用定位器找不到任何元素…”;用黄瓜进行e2e测试时

Javascript &引用;使用定位器找不到任何元素…”;用黄瓜进行e2e测试时,javascript,protractor,cucumber,Javascript,Protractor,Cucumber,我在Cucumber的几个特性上遇到了以下失败:“NoTouchElementError:使用locator:By(css选择器,h1)找不到元素” 我试图设置一个更大的超时,以便给Cucumber更多的时间来查找元素,但它似乎不起作用 以下是测试的主要组成部分: cardTitle.feature: @cardTitle-feature Feature: See card title Display the card title @cardTitle-scenario Scena

我在Cucumber的几个特性上遇到了以下失败:“NoTouchElementError:使用locator: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”元素的测试?
谢谢大家!

写得好!谢谢你提供的所有细节,这很有帮助。以下是我的想法:

  • 您不需要等待页面对象中的睡眠吗?或者,如果出于某种原因要避免页面对象中的异步函数,请将
    睡眠
    链接到
    获取
  • 考虑到你使用的是量角器,这大概是一个角度应用程序,我很惊讶你竟然需要睡觉。通常,作为每个
    浏览器的一部分运行的内置
    waitForAngular
    。get
    应该等到页面完全加载后再继续
  • 你的css看起来很完美,应该可以正常工作。您可以使用css定位html标记和属性
  • 我假设
    这个。sleep
    是页面对象基类中的一个方法还是什么?我有点期待浏览器。睡眠
顺便说一句,我从量角器中的
$
$$
别名中获得了很多好处,它们非常干净。你可以缩短

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

return $('h1').getText();

如果你愿意。

写得好!谢谢你提供的所有细节,这很有帮助。以下是我的想法:

  • 您不需要等待页面对象中的睡眠吗?或者,如果出于某种原因要避免页面对象中的异步函数,请将
    睡眠
    链接到
    获取
  • 考虑到你使用的是量角器,这大概是一个角度应用程序,我很惊讶你竟然需要睡觉。通常,作为每个
    浏览器的一部分运行的内置
    waitForAngular
    。get
    应该等到页面完全加载后再继续
  • 你的css看起来很完美,应该可以正常工作。您可以使用css定位html标记和属性
  • 我假设
    这个。sleep
    是页面对象基类中的一个方法还是什么?我有点期待浏览器。睡眠
顺便说一句,我从量角器中的
$
$$
别名中获得了很多好处,它们非常干净。你可以缩短

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

return $('h1').getText();

如果您愿意。

不是专家而是by.css感觉像是按css属性搜索,但您搜索的是html标记,这是它自己的功能不是专家而是by.css感觉像是按css属性搜索,但您搜索的是html标记,这是它自己的功能非常感谢您的回答Nathaniel!是的,sleep方法是我在我的page对象类中创建的,我用它来解决“timeout”错误,它似乎可以工作。我将尝试按照您告诉我的方式实现它,使用$。我希望我能解决它!非常感谢你的回答,纳撒尼尔!是的,sleep方法是我在我的page对象类中创建的,我用它来解决“timeout”错误,它似乎可以工作。我将尝试按照您告诉我的方式实现它,使用$。我希望我能解决它!