使用Protractor,我如何在基于文本的列表中选择DOM对象
With Protractor, how can I select a DOM Object within a list based on text?
我正在尝试根据标题从产品列表中选择一个产品。
我想做的是说"如果列表中有一个项目的标题与"鸡胸肉(200g)"匹配,然后单击按钮。
有人知道怎么用量角器写这个吗?
我正在努力弄清楚在什么时候返回什么,什么是承诺,什么不是,以及如何等到我有结果再做任何事情。
dom结构看起来像
<li ng-repeat="item in filteredItems" class="ng-scope">
<div class="product">
<h3 class="product-title text-uppercase ng-binding" ng-bind="item.name">Chicken Breast (200g)</h3>
<div class="pad-top-10">
<button class="btn btn-default btn-xs" type="button" ng-click="addItem(item)">
<span class="product-add-label">Add Item</span>
</button>
</div>
</div>
</li>
我已经试过了:
this.Given(/^I can see "([^"]*)" on the page$/, function (productName, done) {
element.all(by.repeater('item in filteredItems')).then(function (products) {
for(var i = 0; i < products.length; i++){
var title = products[i].element(by.css('.product-title'));
title.getText().then(function (text) {
if (text.toLowerCase() === productName.toLowerCase()) {
console.log(text);
// products[i] shows as undefined
console.log(products[i]);
done();
}
})
}
});
});
这是未测试的,但可能有所帮助:
var search = "Chicken Breast (200g)";
var h3 = element(by.cssContainingText('h3.product-title', search));
var button = h3.element(by.xpath('..')).element(by.css('button'));
button.click();
经过进一步调查和phylax建议的一些代码,我发现这是最好的解决方案:
this.Given(/^I can see "([^"]*)" on the page$/, function (productName, done) {
element.all(by.repeater('item in filteredItems')).then(function (products) {
for (var i = 0; i < products.length; i++) {
(function () {
var title = products[i].element(by.css('.product-title'));
var product = products[i];
title.getText().then(function (text) {
if (text.toLowerCase() === productName.toLowerCase()) {
console.log(text);
console.log(product);
done();
}
})
})();
}
});
});
你可以看到我已经添加了一个(function(){}());Webstorm抛出的"可变变量可从闭包中访问"错误,我已经在其中初始化了product
相关文章:
- 将输入字段中的文本提交到我的数据库,同时将其添加到我的列表中
- 如何在从多选下拉列表中选择选项值时动态生成文本框
- ng在下拉列表和文本区域提交
- 如何在剑道下拉列表中按文本和值搜索
- 如何在ReactJs中链接下拉列表和文本区域
- 使用 jQuery 从下拉列表中获取所选文本
- 根据用户从下拉列表中的选择显示多个文本框
- 如何在jquery中获取列表项的最顶端父项的文本
- 如何在下拉列表更改时自动填充mysql查询结果中的文本框值
- 如何按骨干.js打印“此”列表项的文本
- 从文本文件js中读取列表
- 使用两个下拉列表的值填充文本框
- 如果没有从下拉列表中选择任何值,则允许使用php、mysql、javascript将文本框添加到mysql表中
- 将文本框/单选按钮/和下拉列表中的信息添加到dataTable
- Meteor:从Twilio获取SMS文本列表,并将它们插入mongoDB
- 将URL的文本列表转换为可点击的HTML链接
- 生成重新格式化的文本列表
- 为什么ava在比较对象列表和对象文本列表时失败
- 如何在用户在文本列表中键入单词时突出显示JSON字典中的单词,并在表单提交时用它们的描述替换它们
- 更改图像链接悬停在文本列表