【问题标题】:Clicking a checkbox using protractor使用量角器单击复选框
【发布时间】:2017-05-06 20:39:38
【问题描述】:

没有唯一的型号、ID、标签名称。我应该如何检查/单击复选框?

html/代码是:

<div ng-repeat="column in $parent.columns.standardMetrics" class="ng-scope">
      <label class="ng-binding">
        <input type="checkbox" ng-model="column.visible" name="" class="ng-pristine ng-valid">
        uCPM
      </label>
    </div>

</div><div ng-repeat="column in $parent.columns.standardMetrics" class="ng-scope">
      <label class="ng-binding">
        <input type="checkbox" ng-model="column.visible" name="" class="ng-pristine ng-valid">
        CPM
      </label>
    </div>

除了名称旁边的标签外,其中大约有 15 个具有相同名称。我到处搜索以查看量角器是否允许您按标签查找元素。

我的尝试是通过 by.buttonText、by.partialButtonText、by.css 和 by.binding 找到的。我没有运气。

我的目的是传递一个标签名称,我可以切换特定的复选框。 所以就像element(by.css(header)).click(); 其中 header 是传入的内容。

【问题讨论】:

    标签: javascript jquery angularjs protractor


    【解决方案1】:

    我强烈建议使用 ID。使用指令为每个复选框添加 id,然后你可以这样:

    element(by.css('input[myid="checkbox_x"]')); // where x is defined in a loop
    

    【讨论】:

    • 没有任何id。您在我的问题中看到的是确切的代码。
    • 我无法添加 id,这个网站不是我的。
    【解决方案2】:

    我相信会有更好的答案。我刚开始学习量角器:)您可以尝试按索引单击它。

    3 = 位置。

    element.all(by.repeater('column in $parent.columns.standardMetrics').get(3).element(by.css('[ng-model="column.visible"]')).click();
    

    【讨论】:

    • 如何找到我传入的变量的确切索引?
    【解决方案3】:

    你可以使用by.xpath():

    element(by.xpath('//input[@ng-model = "column.visible" and following-sibling::text() = "' + label + '"]'));
    

    【讨论】:

    • 所以是element(by.xpath('//input[' +header+ '= "' + label '"]')) ?
    • @wtosh 刚刚意识到您应该检查以下同级文本。检查更新。标签的示例值为uCPMCPM
    • 我传入的变量会去哪里?
    • @wtosh 标签是这里的变量。
    • 复制并粘贴并用标题替换“标签”,但给了我一个错误:Unexpected string Puts to the '"]')) at the code。
    【解决方案4】:

    编辑:错过了文本属于标签而不是输入。
    这应该可行:
    element(by.xpath("//label[text()='uCPM']/input"));

    【讨论】:

      【解决方案5】:

      为元素分配动态 id:

      <div ng-repeat="column in $parent.columns.standardMetrics" class="ng-scope">
            <label id="label{{$index}}" class="ng-binding">
              <input type="checkbox" ng-model="column.visible" name="" class="ng-pristine ng-valid">
              uCPM
            </label>
      </div>
      

      然后在量角器上:

      element(by.id('label0')).click();
      

      附言请阅读您无法更改 HTML,因为该网站不是您的。试试这个:

      var first= element.all(by.repeater('column in $parent.columns.standardMetrics')).get(0);
      first.get(0).then(function(el) {
        el.click();
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-11-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-17
        • 1970-01-01
        • 2020-10-06
        相关资源
        最近更新 更多