【问题标题】:getText() returns an object and not String (using selenium-cucumber-js)getText() 返回一个对象而不是字符串(使用 selenium-cucumber-js)
【发布时间】:2019-05-02 22:32:48
【问题描述】:

当尝试从 getText() 断言结果时,不断收到错误消息,表明 getText() 返回的是对象而不是字符串。

我对自动化测试很陌生,但我的(有经验的)同事也一样,我们让 JS 开发人员看过它,他也很困惑。

使用 selenium-cucumber-js 作为测试框架。 (这是我们能够在客户端网络上工作的唯一框架)。

我在测试中添加了 console.log 以证明文本是可检索的,它记录它很好但断言仍然失败。

还尝试了此问题中的所有各种建议,但仍无法正常工作 Protractor: element.getText() returns an object and not String

页面对象:

zeroResults: function () {
    return driver.wait(until.elementsLocated(by.css(...)), 10000)
        .then(function () {
            return driver.findElement(by.css(...))
                .getText().then(function (searchOutcome) {
                   console.log(searchOutcome); //this was just to prove the text can be found
                    return searchOutcome;

//我也尝试过这方面的变化(例如删除最终返回)

步骤定义:

this.Then(/^I should see text "Zero results found"$/, function () {
    var searchOutcome = page.xx.zeroResults();
    expect(searchOutcome).to.equal('Zero results found');

期望测试通过但得到:

AssertionError: 预期 { Object (flow_, stack_, ...) } 等于“找到零个结果”

如果我将断言更改为:

return Promise.resolve(searchOutcome).should.eventually.equal('找到零个结果');

我明白了:

TypeError:无法“最终”读取未定义的属性

这些只是一些尝试,但所有尝试都有相似的结果。这影响了多个用户,已在多个测试用例和使用不同的断言/期望中得到证明。

任何帮助表示赞赏。

【问题讨论】:

  • 欢迎来到 SO。您是否将控制台中打印的文本视为 zeroResults 函数的一部分?
  • 您好,感谢您的欢迎。是的,文本确实打印
  • 如果使用console.log 打印searchOutcome 会发生什么?
  • 不确定您的意思是否与我已有的不同?当我按原样运行测试时,我得到: √ 我在搜索字段中输入“xxxx” × 然后我应该看到文本“找到零结果” 找到零结果 “找到零结果”是控制台日志的结果。

标签: selenium cucumberjs


【解决方案1】:

试试下面的。

页面对象:

zeroResults: function () {
    return driver.wait(until.elementsLocated(by.css(...)), 10000)
        .then(function () {
            return driver.findElement(by.css(...))
                .getText().then((searchOutcome) => {
                    return searchOutcome;
                   });

步骤定义:

this.Then(/^I should see text "Zero results found"$/, function () {
    var searchOutcome = page.xx.zeroResults();
    #debug here and see what is the value in searchOutCome
    expect(searchOutcome).to.equal('Zero results found');

【讨论】:

    【解决方案2】:

    这似乎是由于未解决的承诺造成的。让另一个开发人员查看它,他将代码修改为以下内容并且它已经工作了:

    页面对象(未更改)

    zeroResults: function () {
        return driver.wait(until.elementsLocated(by.css(...)), 10000)
            .then(function () {
                return driver.findElement(by.css(...))
                    .getText().then(function (searchOutcome) {
                       console.log(searchOutcome);
                        return searchOutcome;
    

    Step Def(用额外的 console.log 修改)

    this.Then(/^I should see text "Zero results found"$/, function () {
        var searchOutcome = page.xx.zeroResults();
        console.log(typeof (searchOutcome));
        searchOutcome.then(function (value) {
        console.log(value);
        expect(value).to.equal('Zero results found');
    

    我们在其他一些步骤上遇到了问题,所以尝试添加 .then 看看是否可行。

    感谢您对此的所有回复。

    【讨论】:

      猜你喜欢
      • 2016-02-09
      • 2012-07-22
      • 2022-01-09
      • 2017-09-22
      • 1970-01-01
      • 2017-07-18
      • 2011-07-29
      • 2012-11-26
      • 1970-01-01
      相关资源
      最近更新 更多