【发布时间】:2017-08-14 15:15:14
【问题描述】:
我正在使用Nightwatch.js 测试一个Web 应用程序,它使用Selenium WebDriver 与浏览器交互。在我的应用程序中,我有一个动态创建的项目列表,仅按名称区分,名称显示为 <input> 值。我需要按名称查找项目。
文档结构的示例 HTML 表示:
<div class="item">
<input> <!-- current value: "first" -->
</div>
<div class="item">
<input> <!-- current value: "second" -->
</div>
<div class="item">
<input> <!-- current value: "first" -->
</div>
我需要找到div.item,其中包含一个值为second 的输入。
请注意,<input> 的值由其value 的值确定属性,这可能与其value 的值不同属性。在我的例子中,DOM 由React 操作,因此输入可能根本没有value 属性。
有没有办法使用 Nightwatch(或 Selenium WebDriver API)按 属性 值查找元素?
我查看了 WebDriver documentation,我看到的唯一方法是 executing 自定义 JavaScript 代码,它有一些严重的缺点(例如,需要自己实现等待元素出现并且不与 Nightwatch 页面对象交互)。据我所知,所有其他方法都只关注查看 HTML(所以充其量是 attributes,而不是 properties)。
为了完全清楚,使用 input[value=...] (CSS) 或 //input[@value=...] (XPath) 之类的选择器不是解决方案,因为它通过属性值而不是属性执行查找价值。
【问题讨论】:
-
仅供参考,不是
nightwatch.js特定的,而是protractor特定的解决方案可能是使用新引入的by.jslocator。 -
@alecxe 这是有趣的信息,但它似乎与 Nightwatch/WebDriver execute 具有相同的可用性。 (注意 WebElement 在参数和返回值中与 DOMElement 之间的双向转换。)
-
是啊,除了执行自定义JS,恐怕没有别的办法了。
-
你能提供一个示例网站吗?然后我可以测试它。
-
@BaoTran 抱歉,我的用例是专有应用程序。不过,问题本身很容易模拟。
标签: javascript selenium dom selenium-webdriver nightwatch.js