【问题标题】:Protractor returns an object but expected - value of element.getText()量角器返回一个对象但预期 - element.getText() 的值
【发布时间】:2015-03-02 14:01:09
【问题描述】:

无法理解为什么它返回一个对象而不是文本值,一些测试代码:

describe('columns swap', function () {

    describe('location column ', function () {
        it('should swap right', function () {
            browser.sleep(10000);
            var fColumn = element(by.xpath('(//*[@class="k-link"])[2]')).getText();
            console.log(fColumn); 

控制台输出:

>   columns swap
>     location column { ptor_:    { controlFlow: [Function],
>      schedule: [Function],
>      getSession: [Function],
>      getCapabilities: [Function],
>      quit: [Function],
>      actions: [Function],
>      executeScript: [Function],
>      executeAsyncScript: [Function],
>      call: [Function],
>      wait: [Function],
>      sleep: [Function],
>      getWindowHandle: [Function],
>      getAllWindowHandles: [Function],
>      getPageSource: [Function],
>      close: [Function],
>      getCurrentUrl: [Function], ...

如果我将此部分与 expect() 一起使用:

    expect(columnSorting.acpColumn.getText()).to.eventually.equal(fColumn);

我明白了:

  1) columns swap location column  should swap right:
     AssertionError: expected 'Location' to equal { Object (ptor_, parentElement
ArrayFinder, ...) }

所以出于某种原因,我可以从期望中获取文本并且它是正确的 - '位置'

我做错了什么?

【问题讨论】:

标签: javascript selenium-webdriver promise protractor end-to-end


【解决方案1】:

getText() 返回一个承诺。如果你想记录一个实际值,你需要解决它:

element(by.xpath('(//*[@class="k-link"])[2]')).getText().then(function (value) {
    console.log(value);

    expect(columnSorting.acpColumn.getText()).to.eventually.equal(value);
});

请注意,expect() 在 protractor/jasminewd 中已“修补”以隐式解决 Promise。换句话说,您可以断言getText() 等于所需的文本:

expect(element(by.xpath('(//*[@class="k-link"])[2]')).getText()).toEqual('My Text');

【讨论】:

  • 是的,我知道我们可以使用预期的文本 - 但在功能上它对我不起作用,因为我们会有不同的语言翻译。谢谢你的例子。基本上我需要将这个“值”存储为 var 并将其用于我的 expect()。但我能理解怎么做——我对js的了解很差。你能写一个简单的例子吗?
  • @kyxap 我已经更新了答案,包括 then() 函数中的 expect 调用。这是你想说的吗?谢谢。
  • 抱歉,不需要 15 的声望。顺便说一句,我们如何存储值或创建具有返回状态的函数?
  • @kyxap nono,您正在混合“接受答案”和“投票”功能。要接受,只需标记复选框。要回答您的问题:您必须深入了解 Promise,请参阅 stackoverflow.com/questions/24289431/…stackoverflow.com/a/21736757/771848。如果您遇到困难,请考虑单独提出一个问题,以便更多人提供帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-25
  • 2018-08-12
相关资源
最近更新 更多