量角器链式元素混乱

时间:2016-03-22 14:33:07

标签: javascript jquery protractor

我试图创建一个使用Cloudinary的第三方组件的量角器测试。到目前为止,我找不到一个元素是不成功的。

HTML看起来像这样:



<div class="header" id="cloudinary-navbar">
  <ul class="sources clear">
    <li class="source local active" data-source="local">
      <span class="label" data-text-key="sources.local.title">My files</span>
      <span class="icon"></span>
    </li>
    <li class="source url" data-source="url">
      <span class="label" data-text-key="sources.url.title">Web Address</span>
      <span class="icon"></span>
    </li>
    <li class="source camera" data-source="camera">
      <span class="label" data-text-key="sources.camera.title">Camera</span>
      <span class="icon"></span>
    </li>
  </ul>
  <a class="close" href="#">×</a>
</div>
&#13;
&#13;
&#13;

我试图找到第二个li并执行此操作:

var webLinkButton = element(by.id('cloudinary-navbar')).element(by.css('.url'));

我收到以下错误:

Message:
    Failed: No element found using locator: By(css selector, *[id="cloudinary-navbar"])
  Stack:
    NoSuchElementError: No element found using locator: By(css selector, *[id="cloudinary-navbar"])

这让我感到困惑,因为我没有通过CSS搜索cloudinary-navbar

我应该如何找到这个元素?

1 个答案:

答案 0 :(得分:3)

  

找不到使用定位器的元素:By(css选择器,* [id =&#34; cloudinary-navbar&#34;])

*[id="your_id"]WebDriverJS actually uses执行的内容&#34;由id&#34;查找。

在您的情况下,这应该不相关,因为定位器本身是正确的并且应该找到该元素。这些是您找不到元素的常见原因&#34;问题:

  • 该元素位于iframe 内的,您需要切换到它:

    browser.switchTo().frame("frame_name_or_id");
    
  • 您需要明确地等待元素出现

    var EC = protractor.ExpectedConditions;
    browser.wait(EC.presenceOf(element(by.id('cloudinary-navbar'))), 5000);
    
  • 元素实际上并不存在,您需要为其显示一个额外的操作 - 打开一个菜单,例如