2015-11-11 85 views
1

我在尋找從標籤for屬性獲取輸入。從Selenium WD的標籤文本獲取輸入作爲承諾

這是一些示例HTML:

<label for='input_6_36' >Label String</label> <input name='input_36' id='input_6_36' type='text'>

以上是動態生成的,所以我不能硬編碼的ID來迎接我的輸入,因此對於接近這種方式的原因。

所以這裏是我的自定義承諾方法。

wd.addPromiseChainMethod(
    'inputFromLabel', 
    function(text) { 
     return this 
      .elementByXPath("//label[contains(., '" + text + "')]") 
      .getAttribute('for', function(val) { 
       console.log(val); 
      }); 
    } 
); 

中的哪一個inplemented像這樣:

it.only('test name', function(done) { 
    this.page 
     .inputFromLabel('Label String').type('test') 
     .nodeify(done); 
}); 

所以我定製inputFromLabel承諾的方法,我想從獲取for值返回輸入。

我知道在這個時候,我的自定義方法不會返回輸入。

我需要從我正在登錄到控制檯的值中獲取輸入,但我似乎無法使用給定的元素從它的ID中獲取元素?

這裏有一系列的步驟,我相信我想跟進:

  • 從給定文本取標籤(工作)
  • 獲取從標籤for屬性(工作)
  • 獲取從該輸入使用ID(不工作)
  • 返回其輸入,以允許進一步的鏈接(在這種情況下,類型()方法)

如何返回輸入?

回答

1

試試這個,我認爲這可能工作:

wd.addPromiseChainMethod(
'inputFromLabel', 
function(text) { 

    var browser = this; 

    return browser 
      .elementByXPath("//label[contains(., '" + text + "')]") 
      .getAttribute('for') 
      .then(function(value) { 
       return browser.elementById(value); 
      }); 
}); 
+0

完美,謝謝! –