Angular 为什么WebElement上的“click()”失败?

Angular 为什么WebElement上的“click()”失败?,angular,selenium,protractor,Angular,Selenium,Protractor,我正在使用量角器进行角度测量。我的页面模型中的内容如下: export interface TileElement { idx: number; icon: string; title: string; element: WebElementPromise; } getModels() { //used as wfc.getModels() below. return $$('mat-card').map((e, idx) => { // e.cli

我正在使用量角器进行角度测量。我的页面模型中的内容如下:

export interface TileElement {
  idx: number;
  icon: string;
  title: string;
  element: WebElementPromise;
}
  getModels() { //used as wfc.getModels() below.
    return $$('mat-card').map((e, idx) => {
      // e.click();
      return {
        idx,
        icon: e.$('mat-card-content div:nth-child(1)').getText(),
        title: e.$('mat-card-content div:nth-child(2)').getText(),
        element: e.getWebElement()
      };
    }) as Promise<TileElement[]>;
  }
但是,执行失败,出现异常

Failed: this.getId(...).then is not a function
TypeError: this.getId(...).then is not a function
    at WebElement.[serialize] (C:\workspaces\GDSR\gdsr-frontends\node_modules\selenium-webdriver\lib\webdriver.js:1992:25)
    at convertValue (C:\workspaces\GDSR\gdsr-frontends\node_modules\selenium-webdriver\lib\webdriver.js:152:48)
    at C:\workspaces\GDSR\gdsr-frontends\node_modules\selenium-webdriver\lib\webdriver.js:187:17
    at forEachKey (C:\workspaces\GDSR\gdsr-frontends\node_modules\selenium-webdriver\lib\webdriver.js:177:9)
    at C:\workspaces\GDSR\gdsr-frontends\node_modules\selenium-webdriver\lib\webdriver.js:183:5
    at new Promise (<anonymous>)
    at convertKeys (C:\workspaces\GDSR\gdsr-frontends\node_modules\selenium-webdriver\lib\webdriver.js:182:10)
    at convertValue (C:\workspaces\GDSR\gdsr-frontends\node_modules\selenium-webdriver\lib\webdriver.js:156:10)
    at toWireValue (C:\workspaces\GDSR\gdsr-frontends\node_modules\selenium-webdriver\lib\webdriver.js:128:26)
    at Driver.schedule (C:\workspaces\GDSR\gdsr-frontends\node_modules\selenium-webdriver\lib\webdriver.js:802:23)
失败:this.getId(…)。then不是函数
TypeError:this.getId(…)。then不是函数
在WebElement。[序列化](C:\workspace\GDSR\GDSR frontends\node\u modules\selenium webdriver\lib\webdriver.js:1992:25)
在convertValue(C:\workspace\GDSR\GDSR frontends\node\u modules\selenium webdriver\lib\webdriver.js:152:48)
在C:\workspace\GDSR\GDSR frontends\node\u modules\selenium webdriver\lib\webdriver.js:187:17
在forEachKey(C:\workspaces\GDSR\GDSR frontends\node\u modules\selenium webdriver\lib\webdriver.js:177:9)
位于C:\workspace\GDSR\GDSR frontends\node\u modules\selenium webdriver\lib\webdriver.js:183:5
在新的承诺()
在convertKeys(C:\workspace\GDSR\GDSR frontends\node\u modules\selenium webdriver\lib\webdriver.js:182:10)
在convertValue(C:\workspaces\GDSR\GDSR frontends\node\u modules\selenium webdriver\lib\webdriver.js:156:10)
在toWireValue(C:\workspaces\GDSR\GDSR frontends\node\u modules\selenium webdriver\lib\webdriver.js:128:26)
在Driver.schedule(C:\workspaces\GDSR\GDSR frontends\node\u modules\selenium webdriver\lib\webdriver.js:802:23)
如上所示,如果我执行
等待$('mat-card')。单击()它按预期工作。如果我在映射回调中执行
单击
,它也会工作

问题是为什么它不能与以前选择的WebElement一起工作?我不想在每次操作之前都要选择元素


作为一种解决方法,我将
e.locator()
作为interfacet的一部分进行附加,因此在执行过程中,我将执行
wait元素(item.locator)。单击()
使单击发生,但这似乎是错误的。

在黑暗中拍摄,如果只返回elementFinder怎么办

element: e
而不是

element: e.getWebElement()

不要将
e.getWebElement()
传递到
element
,只需直接传递
e


getWebElement()
返回WebDriverJ的
WebElement
,而不是由量角器引入的
ElementFinder
wfc.getModels()是什么?和
模型[0]。元素
在第一个代码段中。好的。。。我现在得到那个角色了。。我需要澄清的最后两个困惑是:1)
wait$('mat-card')。单击();它按预期工作。如果我执行“单击内部映射”回调,它也会工作。
听起来两次单击都有效,但问题是
为什么单击()在WebElement上失败?
和2)记住标题,问题实际上是单击,我可以看到错误显示
this.getId(…).then不是一个函数
我在这里缺少了什么?您什么都没有缺少,当我尝试等待模型[0]时,会弹出一个确切的错误。元素。单击()
。前一行是测试id是否存在,但它是调试的一部分,不是主逻辑,可以使用。长话短说-我不能
单击
WebElement上的
,返回
map
函数,超出该函数的执行范围。在映射解析之后,它就像WebElement从驱动程序上下文中失效/分离一样。这可能是出于设计,但我不知道——即使如此,在这种情况下,它也会抛出有意义的错误。事实上,我在过去曾经尝试过,thios会在PromiseRejectCallback中导致stackoverflow(lol)
异常:C:\workspaces\GDSR\GDSR frontends\node\u modules\selenium webdriver\lib\promise.js:2123返回新的ctor(解析器);          ^  RangeError:PromiseRejectCallback:C:\workspace\GDSR\GDSR frontends\node\u modules\selenium webdriver\lib\promise.js:1999 fullyResolved(partialValue)中的最大调用堆栈大小超出了异常值。然后(
Sergey建议了这一点,无论出于何种原因,它都会引发堆栈溢出。
element: e.getWebElement()