javascript - Protractor - 单击表格中的按钮

标签 javascript angularjs protractor angularjs-e2e

如下面的 HTML 代码所列,每个测试站点旁边都有一个包含测试站点链接列表和删除按钮的表格。

 /* element locators in table */
var testSiteLinks = element.all(by.css('a[ui-sref^="testpages"]'));
var deleteBtnCssStart = "body > div.container > div > div > div > div > div > div:nth-child(2) > table > tbody > tr:nth-child(";
var deteletBtnCssEnd  = ") > td > button";

var testSite = {
deleteSite: function(siteName){
        
        testSiteLinks.each(function(element,index){
                
              
              var temp = index;
              element.getText().then(function(text) {

                  
                 temp++;
                 var patt = new RegExp(siteName);
                 if(patt.test(text)){
                   
                    //css locator for delete button, corresponding to test site
                    var test = deleteBtnCssStart + temp + deteletBtnCssEnd;
                   
                    element(by.css(test)).click();  //this step failing stating, not a function.
                 } 

 


            });   
 }); 
}

我正在尝试添加一个如上所示的函数,以在表中搜索测试站点并删除该站点(如果该站点在表中可用)。但是,当尝试单击删除按钮时,测试失败,并提示“TypeError:对象不是函数”。如果这需要任何修正,请您提出建议。

请找到下面的表格 HTML 代码以及测试站点链接。

<table class="table card">
    <thead></thead>
          <tbody>
          <!-- ngRepeat: site in Sites --><tr ng-repeat="site in Sites" class="ng-scope">
            <td>
              <button ng-hide="role.DeletingSite===true" ng-click="role.DeletingSite=true" class="delSite pull-right btn btn-sm btn-danger" tabindex="0" aria-hidden="false">Delete</button>

              <div ng-show="role.DeletingSite===true" class="pull-right ng-hide" aria-hidden="true">
               <a ng-click="role.DeletingSite=false" class="btn btn-sm btn-default pull-right" tabindex="0">Cancel</a>
               <a ng-click="deleteSite(site)" class="reallyDelete btn btn-sm btn-danger pull-right " tabindex="0">Delete</a>
              </div>

             <a ui-sref="testpages({id:site.id, name:site.name, host:site.host, httpsSupported:site.httpsSupported})" class="ng-binding" href="#/testsite/pages/40288a884cdaa49a014cdbfb08270003/testsite/testsite/true   ">testsite (testsite)</a>
                        </td>
                    </tr><!-- end ngRepeat: site in Sites --><tr ng-repeat="site in Sites" class="ng-scope">
                        <td>
                            <button ng-hide="role.DeletingSite===true" ng-click="role.DeletingSite=true" class="delSite pull-right btn btn-sm btn-danger" tabindex="0" aria-hidden="false">Delete</button>

                            <div ng-show="role.DeletingSite===true" class="pull-right ng-hide" aria-hidden="true">
                                <a ng-click="role.DeletingSite=false" class="btn btn-sm btn-default pull-right" tabindex="0">Cancel</a>
                                <a ng-click="deleteSite(site)" class="reallyDelete btn btn-sm btn-danger pull-right " tabindex="0">Delete</a>
                            </div>

                            <a ui-sref="testsitepages({id:site.id, name:site.name, host:site.host, httpsSupported:site.httpsSupported})" class="ng-binding" href="#/test/pages/40288a884cd57e14014cd60701890001/TestSite.org/testsite.org/false   ">Testsite.org (testsite.org)</a>
                        </td>
                    </tr><!-- end ngRepeat: site in Sites -->
                </tbody>
            </table>

最佳答案

首先,element(by.css(test))调用将使用来自内部范围element变量each() 回调。

相反,我会用 filter() 来处理它和 evaluate() :

element.all(by.repeater("site in Sites")).filter(function (site) {
    return site.evaluate("site.name").then(function (name) {
        return name == siteName;
    });
}).then(function (sites) {
    if (sites) {  // we have a match - find and click the Delete button
        sites[0].element(by.linkText("Delete")).click();
    }
});

这里的想法是迭代转发器中的所有站点,评估 site.name 并检查它是否是所需的站点。如果是,请单击中继器 block 内的Delete 按钮。

关于javascript - Protractor - 单击表格中的按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31324183/

相关文章:

javascript - 范围值未显示在 View 中

javascript - 浮点图库 : show points on line chart only on hover?

javascript - 如何通过单击一个来选择两个表格单元格?

javascript - 使用POST请求登录时读取服务器发送的cookie

javascript - Angular 一 : javascript timeout function

javascript - Protractor 测试用例

android - Protractor + Appium 在 chrome 中隐藏 android 键盘

protractor - package.json 中的链接脚本未正确执行

javascript - 如何使克隆选择的行为独立于原始选择?

javascript - subview 在 angular-ui-router 中不起作用