我在使用Angular构建的应用程序的一个页面上使用常规selenium webdriver时遇到了严重问题。我已经在我的pom.xml中添加了ngwebdriver的依赖项,到目前为止我已经解决了一些问题。只有下拉,我仍然无法弄清楚如何做到这一点。这是我所说的下拉菜单:
<d3-data-list _nghost-c8="" ng-reflect-data-source="[object Object]" ng-
reflect-html-id="documents_glossary_entityPicke" ng-reflect-allow-blank-
option="true" ng-reflect-blank-option-text="All entities" ng-reflect-default-
caption="Choose an entity"><div _ngcontent-c8="" class="dropdown d3-data-
list" id="documents_glossary_entityPicker">
<button _ngcontent-c8="" aria-expanded="true" aria-haspopup="true" class="btn btn-default dropdown-toggle" data-toggle="dropdown" type="button" id="documents_glossary_entityPicker_button">
All entities
<span _ngcontent-c8="" class="caret"
id="documents_glossary_entityPicker_caret"></span>
</button>
<ul _ngcontent-c8="" aria-labelledby="dropdownMenu1" class="dropdown-menu"
ng-reflect-infinite-scroll-handle-in-progress="false"
id="documents_glossary_entityPicker_dropdown">
<!--bindings={
"ng-reflect-ng-if": "true"
}--><li _ngcontent-c8="">
<a _ngcontent-c8=""
id="documents_glossary_entityPicker_blank_option">All entities</a>
</li>
然后下拉列表中的选项如下:
</li><li _ngcontent-c8="">
<a _ngcontent-c8="" id="documents_glossary_entityPicker_option_2">Entity three</a>
</li>
问题是我的下拉列表中元素的顺序没有得到维护,因为如果在另一个页面上编辑了一个元素(实体),那么它将位于列表的底部。所以我永远无法真正知道我的元素在下拉列表中的确切位置。
我可以使用browser.findElement(ByAngular.buttonText("text"))
之类的东西吗?感谢。
答案 0 :(得分:0)
我猜您正在寻找filter()
或.reduce()
种可能性。
.reduce()
检查the example here
对于.filter()
,您的代码应如下所示:
element.all(by.css('ul li a')).filter(function (elm) {
return elm.getAttribute('value').then(function (text) {
return text === "TheValueYouLookFor";
});
}).first().click();
我自己并没有对此.filter
进行测试,但它距离Protractor documentation非常直接。