【问题标题】:Click Checkbox is not working for protractor单击复选框不适用于量角器
【发布时间】:2018-01-16 19:49:19
【问题描述】:

我的量角器自动化脚本无法点击 1 个复选框。当我检查原始代码时,除了 ng-touched/ng-untouched 和男/女之外,没有 id 并且很可能相同。还有其他方法可以单击此复选框吗?

代码如下。

男性复选框:

 <div ng-repeat="gender in genders" class="ng-binding ng-scope" style="">
                                                    <input type="checkbox" ng-
    model="usergender" ng-checked="usergender == gender.ParameterId" ng-
    click="genderId(gender.ParameterId, $event)" class="group1 genderChkBox ng-
    pristine ng-valid ng-empty ng-touched" style=""> Male
                                                </div>

女性复选框:

<input type="checkbox"ng-model="usergender" ng-checked="usergender == 
gender.ParameterId" ng-click="genderId(gender.ParameterId, $event)" 
class="group1 genderChkBox ng-pristine ng-untouched ng-valid ng-empty"> 
Female </div>

我已尝试使用以下代码检查男性,但收到此消息错误:失败:男性未定义

var male = element(by.model('usergender'));
        male.click();
        expect(Male.getText()).toBe('Male');

【问题讨论】:

    标签: javascript html angularjs protractor


    【解决方案1】:

    如果你使用的是最新的量角器,试试这个

    $('.genderChkBox').click().then(()=>{
        expect(Male.getText()).toBe('Male');
    });
    

    【讨论】:

    • 试过上面的代码,我可以看到它已经点击了男性复选框,不幸的是它仍然失败并返回以下消息。失败:未定义男性
    • 您可能需要为 div 分配一个类或 id 或从父节点中选择它
    • 是的,我已经将它分配给父节点。 var Male = element(by.css('[ng-repeat="gender in genders"')); $('.genderChkBox').click().then(()=>{ expect(Male.getText()).toBe('Male'); });这工作正常。但是当我想尝试选择女性时。我收到错误 - 预期“男性”为“女性”。是因为默认情况下它是男性吗? var Female = element(by.css('[ng-repeat="gender in genders"]')); $('.genderChkBox').click().then(()=>{ expect(Female.getText()).toBe('Female'); });
    • 你并没有真正使用 ng-repeat 作为选择器。在您的情况下,您需要使您的 HTML 更加结构化,例如
    • 我无法控制这个原始代码。我尝试使用 ng-click 作为选择器,但 Failed: No element found using locator: By(css selector, [ng-click="genderId()"]) var Female = element(by.css('[ng-点击="genderId()"]')); $('.genderChkBox').click().then(()=>{ expect(Female.getText()).toBe('Female'); });
    【解决方案2】:
    var gander = element.all(by.model('usergender'));
       gander(0).click().then(function(){
       expect(gander(0).getText()).toBe('Male');
       expect(gander(1).getText()).toBe('Female');
    });
    

    或者您可以使用以下方式来执行单个操作:-

    var male = element(by.xpath('.//*[text()="male"]']));
    male.click().then(function(){
    expect(male.getText()).toBe('Male');
    });
    

    【讨论】:

    • 谢谢 Yash。尝试并收到此消息失败:无效选择器:由于以下错误,无法使用 xpath 表达式 .//[text()="male"] 定位元素:SyntaxError:无法在“文档”上执行“评估”:字符串 './/[text()="male"]' 不是有效的 XPath 表达式。
    • 改用这个 xpath .//*[text()="male"]
    • 更新了答案。您是否尝试过第一种解决方案?它应该可以工作。
    • 嗨 Yash,我尝试了第一种解决方案,但它没有单击/选中男性复选框。并收到此消息 - 失败:gander 不是函数
    • 对于第二个解决方案,它失败并显示以下错误消息。使用定位器找不到元素:By(xpath, .//*[text()="male"])
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-23
    • 2013-03-29
    • 2019-04-29
    • 2020-12-15
    相关资源
    最近更新 更多