我正在尝试使用量角器编写一个端到端测试,我想从列表中获取名称以检查哪些复选框未选中。 我可以使用isSelected()检查复选框的状态,但是如何获取与之对应的名称列表。 这就是我要获取的标签Option 1和Option 2的标签,一一看是否被选中:
<ul _ngcontent-c8="" class="children" style="">
<li _ngcontent-c8="" class="ng-tns-c8 " ng-reflect-ng-class="[object Object]">
<input _ngcontent-c8="" class="ng-tns-c8" id="all" type="checkbox">
<label _ngcontent-c8="" class="ng-tns-c8" for="all">Option 1</label>
</li>
<li _ngcontent-c8="" class="ng-tns-c8 " ng-reflect-ng-class="[object Object]">
<input _ngcontent-c8="" class="ng-tns-c8" id="all" type="checkbox">
<label _ngcontent-c8="" class="ng-tns-c8" for="all">Option 2</label>
</li>
</ul>
任何帮助和建议将不胜感激
答案 0 :(得分:0)
我有两种方法可以尝试,但我自己实际上还没有运行过。它们都涉及首先获取ul
中的所有列表项,并且都使用async / await语法编写。
选项1
let checkedNames = [];
//iterate over all list items
await element.all(by.xpath('ul[@class="children"]//li')).each(async (li) => {
//if checkbox is selected then get label text and add to array
let chkboxIsSelected = await li.element(by.tagName('input')).isSelected();
if (chkboxIsSelected) {
let lableTxt = await li.element(by.tagName('label')).getText();
//Add lable text to array of labels
checkedNames.push(lableTxt);
};
})
说明
element.all(by.xpath('ul[@class="children"]//li'))
将返回elementFinder数组,我们可以对element finder数组调用几种方法,所有方法都在here中列出。 .each
是这些方法之一,它将在元素查找器数组上迭代并在每个元素上运行一个函数。它需要将元素传递到函数中才能运行。
其语法如下
eleArray.each(function(elementInArray){
})
我们可以使用arrow notation声明此函数,由于它是一个列表项的数组,因此我们可以对其进行迭代,因此可以将传递给函数的参数重命名为'li',以进行描述。
eleArray.each((li) => {
})
此外,由于我使用的是async / await语法而不是Promise Manager,因此我在所有包含异步操作的函数之前添加关键字async,以检查您是否在浏览器中选中了复选框并从输入字段获取文本
选项2
let allListItems = await element.all(by.xpath('ul[@class="children"]//li'));
//filter out all of the list items that contain unchecked checkboxes
let itemsWithSelectedChkbox = await allListItems.filter(async li => {
return await li.element(by.tagName('input')).isSelected();
});
//convert the array of list items into an array which contains
let textForAllCheckedBoxes = await itemsWithSelectedChkbox .map(async li => {
return await li.element(by.tagName('label')).getText();
})
console.log(`The test associated with all the checked checkboxes is ${textForAllCheckedBoxes}`);
希望这些对您有用,但请告诉我是否存在问题!