【问题标题】:by.css() finds element, but if anything is appended, no element found using locator error thrownby.css() 找到元素,但如果附加任何内容,则使用定位器错误找不到元素
【发布时间】:2016-08-03 00:49:28
【问题描述】:

我正在使用量角器进行测试,并且正在尝试使用标题标签访问 HTML 上的元素。问题是,当我尝试使用标题标签附加到元素时(我需要一个更下方的元素来测试 innerHTML),我得到“使用定位器找不到元素:By(css 选择器) 错误。

此代码通过:

browser.element.all(by.css('div[data-row="1"]')).get(0).element(by.css('div[class="widget-body"]')).
element(by.css('section[class="scrollable"]')).element(by.css('div[title="myTitle: myTitle"]'));

但是这段代码没有:

browser.element.all(by.css('div[data-row="1"]')).get(0).element(by.css('div[class="widget-body"]')).
element(by.css('section[class="scrollable"]')).element(by.css('div[title="myTitle: myTitle"]')).
element(by.css('span[class="text-I-Want ng-binding"]')).getInnerHtml();

HTML 元素:

<div title="myTitle: myTitle">
    <header><b class="ng-binding">myTitle</b></header>
        <section>
            <h3><span class="text-on-hand ng-binding">myTitle</span>
        </section>
</div>

数据行/小部件主体/可滚动元素是我需要访问的元素的父元素。我在网上找不到任何资源告诉我为什么会发生这种情况。有人可以帮忙吗?

【问题讨论】:

  • 可以附上页面截图吗?

标签: javascript protractor


【解决方案1】:

第一个代码块通过的原因是 Protractor 在这种情况下实际上根本不会尝试定位元素。仅当您对元素执行操作或请求某个属性或属性时,您才会触发 Protractor 尝试定位元素。

换句话说,问题在于您定位元素的方式。

您构建的定位器链看起来不可靠,您应该调试链的哪个部分导致错误。 Put a browser.pause() or browser.debugger() 并在 shell 中尝试您的 CSS 选择器。

由于我们无法重现您的问题,因此很难说出更多信息。

【讨论】:

  • 我会把你的标记为正确的。关于我如何解决问题的因素太多了,但基本上标题隐藏在一个下拉菜单中,当单击“+”号时会打开该下拉菜单。在不同的页面上,我不必在 click() 中编写代码以使测试通过。在这个页面上,我必须按 + 才能让菜单下降,然后我才能真正找到元素。长话短说,量角器测试不只是复制和粘贴,如果某件事在一页上有效,即使它们几乎相同。它很有可能不适用于单独的页面。
  • 如果没有你的帮助,我不会通过量角器 API 来发现我可能出错的地方。
猜你喜欢
  • 2014-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-04
  • 1970-01-01
  • 2021-12-22
相关资源
最近更新 更多