【问题标题】:False result when using instance of ElementFinder使用 ElementFinder 实例时的错误结果
【发布时间】:2017-04-29 11:09:34
【问题描述】:

我只是做了非常非常基本的事情,但结果也是错误的: console.log("检查元素"+ (element(txt_LoginUsername) instanceof ElementFinder));

检查元素是否为假

但如果我使用 webstorm 的调试工具,它会给出正确的结果。

我只是在得到答案后更新问题

import {browser, ExpectedConditions as EC, $, $$, element, by,protractor,ElementFinder} from 'protractor'
  console.log("element find when importing ElementFinder from 'protractor' and use ElementFinder"+(element(Welcome.txt_SelectOrg) instanceof  ElementFinder));
  console.log("element find when importing protractor from 'protractor' and use protractor.ElementFinder"+(element(Welcome.txt_SelectOrg) instanceof  protractor.ElementFinder));

这是结果,所以 Mirosław Zalewski 的答案是完全正确的!但是还有一个问题,ElementFinder和protractor.ElementFinder有什么区别

从“量角器”导入 ElementFinder 时查找元素并使用 ElementFinderfalse 导入量角器时的元素查找 'protractor' 并使用 protractor.ElementFindertrue

【问题讨论】:

  • Protractor 中的所有动作都是承诺,你不能像这样记录结果。在记录数据之前首先解决一个承诺。更多信息请查看here 或搜索 Stackoverflow
  • @wswebcreation 除了element(),它返回instance of ElementFinder class
  • @Mike 我在答案中添加了一段。它们在源代码级别上没有区别,但是 - 我不确定为什么 - JavaScript 认为它们是不同的。我认为这里有命名空间在起作用,但我无法证明这一点。如果该解释对您来说足够好,请考虑accepting my answer。如果您想了解更多信息,请考虑 asking separate question - 但请确保您发布 full reproducible example

标签: javascript typescript protractor instanceof


【解决方案1】:

如果没有更多上下文,不可能肯定地说,但我猜ElementFinder 不是你想的那样。

Protractor 不会在全局命名空间中公开其内部类。当我尝试运行类似于您的代码时,我收到 JavaScript 错误:

ReferenceError: ElementFinder is not defined

如果我尝试,它会按预期工作:

element(txt_LoginUsername) instanceof protractor.ElementFinder

如果您没有收到错误,则似乎在您的代码中定义了 ElementFinder,但它与 protractor.ElementFinder 不同。这可以通过一些不寻常的功能原型来实现,例如:

const ElementFinder = () => element('something');
ElementFinder.prototype = protractor.browser;

要验证您的ElementFinder 是否与protractor.ElementFinder 相同,请使用:

ElementFinder === protractor.ElementFinder

要回答您的第二个问题(“ElementFinder 和 protractor.ElementFinder 有什么区别”),您必须深入研究 Protractor 源代码并了解模块和组件如何相互作用。似乎在某些地方,这些类被实例化(或者可能是命名空间),使得它们与 JavaScript 解释器的角度不同,即使它们具有完全相同的源代码。

【讨论】:

  • 感谢您的聪明回答。我只是更新我的问题。但是,我还有一个问题。 ElementFinder 和 protractor.ElementFinder 有什么区别,为什么我的调试工具会得到错误的结果。
猜你喜欢
  • 2019-01-18
  • 2013-03-30
  • 1970-01-01
  • 2020-12-28
  • 1970-01-01
  • 2018-07-11
  • 1970-01-01
  • 1970-01-01
  • 2018-01-25
相关资源
最近更新 更多