如何在aync / await函数中使用量角器element.all

时间:2019-03-10 02:18:28

标签: selenium jasmine protractor e2e-testing angular-e2e

我的代码就像

async function myTestFunc(){
               let items:ElementArrayFinder = await element.all( by.xpath("./li"));
}

该代码给出以下错误

'items' is declared but its value is never read.ts(6133)
Type 'any[] | ElementFinder[]' is not assignable to type 'ElementArrayFinder'.
Type 'any[]' is missing the following properties from type 'ElementArrayFinder': browser_, getWebElements, locator_, actionResults_, and 35 more

文档说“ element.all”返回“ ElementArrayFinder”。

但是当在异步/等待功能中使用“ element.all”时,它似乎正在返回“ ElementFinder[]”。

那怎么可能? 因此,我无法使用“ each()”中的“ get()”或“ ElementArrayFinder”之类的方法。

在“ element.all”中使用“ ElementArrayFinder”的最佳方法是什么?

这是我的package.json

"devDependencies": {
    "@types/jasmine": "^3.3.5",
    "@types/node": "^10.12.18",
    "protractor": "^5.4.2",
    "typescript": "^3.2.2"
  },
  "dependencies": {
    "@types/jasmine-data-provider": "^2.2.1",
    "jasmine-data-provider": "^2.2.0",
    "protractor-jasmine2-html-reporter": "0.0.7"
  }

2 个答案:

答案 0 :(得分:0)

您正在使用哪个版本的量角器? loop语法在量角器内部使用,并且必须以某种方式隐瞒。这是5.2.0中的一个问题,但我认为它已在当前版本(5.4.2)中修复。如果您查看源代码,则Starting around line 550

for div in soup.find_all('div'):
    try:
        print ('id : ' + ''.join(div['id']))
        print ('class : ' + ' '.join(div['class']))
        print()
    except:
        pass

它曾经只是

ElementFinder[]

长话短说,您使用的是哪个版本,升级有帮助吗?

答案 1 :(得分:0)

答案很简单:element.all有自己的then函数,分别声明。

所以当你这样做的时候

let result = element.all();

您将得到ElementArrayFinder的结果,如Returns部分中所指定。 ElementArrayFinder是一个对象,具有您想要的所有geteach等所指定的功能。

但是如果把它变成了诺言,

let result = await element.all();

然后它将返回A promise which will resolve to an array of ElementFinders represented by the ElementArrayFinder.,它基本上是ElementFinder[]函数的Returns部分中指定的ElementArrayFinder.prototype.then