在以下情况下想寻求您的帮助:
我需要访问一个表,选择包含状态='GOO'的行,然后 我需要单击一个按钮以激活该行的编辑,然后 我在复选框所在的最后一列单击a(此复选框负责将列中的值从False更改为true,反之亦然)
在函数中单击我正在执行的按钮:
function changeConformStatus(statusCode){
element(by.id('btnEdit-US.'+statusCode)).click();
browser.sleep(500);
}
在上面相同的功能中,我还具有在显示复选框后单击该复选框并单击以保存它的动作:
element(by.css('[editable-checkbox="scopeValue.getConformMapping(scopeValue.getDataRow('+'US.'+statusCode+')).conform"]')).click();
element(by.id('btnSubmit-US.'+statusCode)).click();
所有元素的“ US”后面都有状态代码。因此,这就是为什么我要从测试中接收状态,然后将其直接传递给元素定位器。
我的问题/问题是...每次执行测试时,都可以单击该按钮进行编辑(位于表的第一列,与我要单击的复选框位于同一行),但失败复选框:
“使用定位器找不到任何元素:By(css选择器,[editable-checkbox =” scopeValue.getConformMapping(scopeValue.getDataRow(US.GOO))。conform“])”
所以。然后我如何单击此复选框?
HTML:
<table id="datatableDir" class="table table-hover table-bordered table-striped dataTable no-footer" style="width: 100%" role="grid" aria-describedby="datatableDir_info">
<thead>...</thead>
<tbody>
<tr role="row" class="odd">
<td id="2-4" class="ng-scope">
<span editable-checkbox="scopeValue.getConformMapping(scopeValue.getDataRow('US.GOO')).conform" e-name="conform" e-form="scopeValue.rowforms['US.GOO']" e-required="" class="ng-scope ng-binding editable editable-hide">false</span>
<span class="editable-wrap editable-checkbox ng-scope">
<span class="editable-controls">
<input type="checkbox" name="conform" required="required" class="editable-input ng-touched ng-dirty ng-valid-parse ng-not-empty ng-valid ng-valid-required" ng-model="$data" style="">
<div class="editable-error ng-binding ng-hide" ng-show="$error" ng-bind="$error" style=""></div>
</span>
</span>
</td>
</tr>
</tbody>
</table>
更新
@Sanja的回答是99%正确,我必须这样做才能解决问题:
element(by.xpath("//*[@editable-checkbox=\"scopeValue.getConformMapping(scopeValue.getDataRow("+'\'US.'+statusCode+"\')).conform\"]/../span/span/input")).click();
答案 0 :(得分:0)
根据代码,您似乎要单击跨度,而不是复选框。 为了单击该复选框,您需要选择输入元素:
element(by.xpath(".//[@editable-checkbox='scopeValue.getConformMapping(scopeValue.getDataRow('+'US.'+statusCode+')).conform/../span[1]/span/input")).click()