Javascript 单击带有量角器的复选框?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/31907147/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-23 07:21:20  来源:igfitidea点击:

Clicking a checkbox with protractor?

javascriptcssangularjsprotractor

提问by Combospirit

HTML code

HTML代码

<div class="check-box-panel">
<!--
 ngRepeat: employee in employees 
-->
<div class="ng-scope" ng-repeat="employee in employees">
    <div class="action-checkbox ng-binding">
        <input id="John" type="checkbox" ng-click="toggleSelection(employee.name)" 
                   ng-checked="selection.indexOf(employee.name) > -1" value="John"></input>

    <label for="John">
        ::before
    </label>
<!--
 John               
 end ngRepeat: employee in employees 
-->

<div class="ng-scope" ng-repeat="employee in employees">
<div class="action-checkbox ng-binding">
    <input id="Jessie" type="checkbox" ng-click="toggleSelection(employee.name)" 
               ng-checked="selection.indexOf(employee.name) > -1" value="Jessie"></input>

    <label for="Jessie"></label>

I tried using jQuery

我尝试使用 jQuery

element(by.repeater('employee in employees')).element(by.id('Jessie')).click();

also,I tried using css

另外,我尝试使用 css

element(by.repeater('employee in employees')).$('[value="Jessie"]').click();

But it didn't do the job. Any other way I can click on the particular Checkbox?

但它没有完成工作。我可以通过其他方式单击特定的复选框吗?

回答by BarretV

Alright I had a very similar issue where I couldn't click the checkbox. It turned out I had to click the checkbox label. However if you want to do any checks on if the checkbox is selected then you have to check the actual checkbox. I ended up making two variables, one for the label and one for the actual checkbox.

好吧,我遇到了一个非常类似的问题,我无法单击复选框。结果我不得不点击复选框标签。但是,如果您想对复选框是否被选中进行任何检查,那么您必须检查实际的复选框。我最终创建了两个变量,一个用于标签,另一个用于实际复选框。

JessieChkbxLabel = element(by.css("label[for='Jessie']"));
JohnChkbxLabel   = element(by.css("label[for='John']"));

//Click the Jessie checkbox
JessieChkbxLabel.click();

//Click the John checkbox
JohnChkbxLabel.click();

回答by Blue

You should just need to use element(by.id('Jessie')) to grab your object. The issue you might be having is that click() returns a promise, so you need to handle that with a .then. So something along the lines of:

您应该只需要使用 element(by.id('Jessie')) 来抓取您的对象。您可能遇到的问题是 click() 返回一个 promise,因此您需要使用 .then 处理它。所以类似的东西:

element(by.id('Jessie')).click().then(function(value) {
   // fulfillment
   }, function(reason) {
   // rejection
});

回答by alecxe

Aside from checking the iddirectly, you can also filterthe desired element checking the employee name:

除了id直接检查,您还可以filter检查员工姓名所需的元素:

var employee = element.all(by.repeater('employee in employees')).filter(function (elm) {
    return elm.evaluate("employee.name").then(function (name) {
        return name === "Jessie";
    });
}).first();
employee.element(by.css("input[type=checkbox]")).click();