Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript TypeError:无法调用未定义的方法“click”_Javascript_Angularjs_Selenium_Promise_Protractor - Fatal编程技术网

Javascript TypeError:无法调用未定义的方法“click”

Javascript TypeError:无法调用未定义的方法“click”,javascript,angularjs,selenium,promise,protractor,Javascript,Angularjs,Selenium,Promise,Protractor,我希望通过第二列值从表中选择特定元素,我删除了呈现的空白,在找到该元素后,我希望单击该元素,返回值为true。我试过了,但它没有点击它,只是找到了元素 我要选择的字段的html代码如下: <table ng-table="tableParams" id="Panel" class="tbl-option-list" template-pagination="directives/controls/Pager/Pager.html"> <caption translate

我希望通过第二列值从表中选择特定元素,我删除了呈现的空白,在找到该元素后,我希望单击该元素,返回值为true。我试过了,但它没有点击它,只是找到了元素

我要选择的字段的html代码如下:

<table ng-table="tableParams" id="Panel" class="tbl-option-list" template-pagination="directives/controls/Pager/Pager.html">
    <caption translate>Orders</caption>
    <tr id="Panel">
        <!-- 1 -->
        <th class="fixed-width-glyphicon"></th>
        <!-- 2 -->
        <th translate>Identifier</th>
    </tr>
        <tr ng-repeat="item in $data track by $index" ng-class="{'active-bg': order.$selected}" ng-click="changeSelection(order,  getRowActions(order))">
        <!-- 1 -->
        <td class="fixed-width-glyphicon">
            <div class="fixed-width-glyphicon">
                {{item.priority.toUpperCase()[0]}}
            </div>
        </td>
        <!-- 2 -->
        <td>{{item.identifierCode}}</td>
    </tr>
</table>
我收到了以下错误:

TypeError:无法调用未定义的方法“click”


似乎该元素没有返回以供单击。尝试下面的示例,单击并查看它是否在过滤器函数中正常工作,而不是使用承诺返回元素-

element.all(by.repeater('item in $data track by $index')).filter(function(row) {
    //return found element
}).then(function(elem) {
    elem[0].click(); //click it here
});
或者以下面的方式返回元素,然后在测试规范中单击它-

var clickElement = element.all(by.repeater('item in $data track by $index')).filter(function(row) {
    //return found element
}).then(function(elem) {
    return elem[0]; //return the element
});
return protractor.promise.fulfilled(clickElement);

希望有帮助。

为什么不直接返回元素呢?无需承诺。此处延期:

return element.all(by.repeater('item in $data track by $index')).filter(function(row) {
    row.getText().then(function(txt) {
    txt = txt.replace(/\s/g, '');
    var found = txt.split('ID0001');
    return found.length > 1;
});
}).then(function(elem) {
    return elem[0];
});

注意开始时添加的返回,这样您就返回了对返回元素[0]的承诺

.filter函数应该返回一个值。 在你的例子中,我认为应该在第三行:

return row.getText().then(function(txt) {

你能在代码中添加一个JSFIDLE吗?它很容易调试;在第一个视图中,您试图单击的元素似乎没有显示。@Radu,Gragrator是一个node.js模块,它不会在JSFIDLE中运行。您可以添加代码来单击该元素吗?我猜您正在尝试单击返回的承诺而不是返回的元素。那么错误消息告诉您什么呢?向后追踪并找到错误。避免
return row.getText().then(function(txt) {