2017-12-28 18 views
2

こんにちは私は分度器を初めて使っています。私は以下の2つの関数を持っています。最初の関数は2番目の関数でそれ。私はclickRowElementUsingRowTextAndColumnNameに最初の関数に適用されるthen機能の「結果」オブジェクトを使用しようとしていますたび分度器 - 別の関数から1つの関数値を使用する問題

getColumnNumber(columnName) { 
     this.eh.waitForElement(this.GridsEleMap.get("HeaderTableHeaderRow")); 
     var colEle = this.GridsEleMap.get("HeaderTableHeaderRow").all(by.xpath(".//td//div[contains(@class,'text-content')]")); 
     return colEle.getText().then(function (text) { 
      var actIndex = text.indexOf(columnName) + 1; 
      logger.info("Column Index:" + actIndex); 
     }); 
    } 

clickRowElementUsingRowTextAndColumnName(rowText, columnName) { 
    var ele = this.GridsEleMap.get("BodyTable"); 
    return this.getColumnNumber(columnName).then(function (result) { 
     logger.info("Text:" + result); 
     var cellEle = ele.all(by.xpath(".//tr//td[" + result + "]//div[@class='virtualLink']")); 
     logger.info("Result:" + cellEle); 
     return cellEle.filter(function (elem) { 
      browser.actions().mouseMove(elem).perform(); 
      browser.sleep(50); 
      return elem.getText().then(function (text) { 
       return text.trim() === rowText.trim(); 
      }); 
     }).each(function (element) { 
      browser.actions().mouseMove(element).perform(); 
      element.click(); 
      browser.sleep(10*1000); 
     }); 
    }); 

は、その値は未定義来ています。それで私を助けてください。

特定の列インデックスのxpathを形成し、その上で操作を実行するためには、この結果値を渡す必要があります。

+0

'colEle.getText()' promiseから 'return(text.indexOf(columnName)+ 1)'という値を返すべきです。 –

答えて

2

最初の関数の値を適切に返す必要があります。 あなたは、例えば、以下のコードを試すことができます:あなたが表示された場合

getColumnNumber(columnName) { 
     ... 
     return colEle.getText().then(function (text) { 
      return text.indexOf(columnName) + 1; 
     }); 
} 

、それはactIndexを返します。

正しく連結されていないコードがほとんどないことに注意してください。すべての分度器メソッドは、フローの同期を保つために連鎖する必要がある約束を返します。

次に、提案と同様に、xpathロケーターの使用を避けてください。 彼らは読めなくなり、パフォーマンスが低下します。

関連する問題