使用ElementFinder实例时出错

时间:2017-04-29 11:09:35

标签: javascript typescript protractor instanceof

我只做非常基本的事情,但结果也是假的: console.log(“检查元素”+(ElementFinder的元素(txt_LoginUsername)实例));

检查元素false

但如果我使用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ławZalewski的答案是完全正确的!但仍然有一个问题,ElementFinder和protractor.ElementFinder

之间有什么区别
  从'量角器'导入ElementFinder时使用

元素查找并使用   从中导入量角器时找到ElementFinderfalse元素   '量角器'并使用protractor.ElementFindertrue

1 个答案:

答案 0 :(得分:0)

如果没有更多背景信息,我们无法肯定地说,但我认为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解释器的观点不同,即使它们具有完全相同的源代码。