使用 ElementFinder 实例时的错误结果

False result when using instance of ElementFinder

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

检查元素错误

但是我用webstorm的debug工具,结果是正确的

得到答案后我才更新问题

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

有什么区别

element find when importing ElementFinder from 'protractor' and use ElementFinderfalse element find when importing protractor from 'protractor' and use protractor.ElementFindertrue

如果没有更多的上下文就不可能肯定地说,但我猜 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

要回答您的第二个问题 ("what is the difference between ElementFinder and protractor.ElementFinder"),您必须深入研究 Protractor 源代码并了解模块和组件如何相互作用。似乎在某个地方,这些 类 被实例化(或者可能命名空间),使它们不同于 JavaScript 解释器的观点,即使它们具有完全相同的源代码。