2016-05-11 13 views
0

を見つけよう。アプリはSPAです。 私がしたいのは、特定のタブを取得し、それをクリックすることだけです。 私はテストにOKをロードしました。ここ はそれが 「我々はいくつかのタブを持っている」ではなく「タブ名を見つけることができる」失敗渡しSelenium.webdriverこんにちは、私はモカとノードJSを使用していて、作業webdriverをセレンを取得しようとしていたタブのテキストvaue

describe("MYHtml",function(){ 
    var driver; 
    var tabs; 
    driver = new webdriver.Builder() 
     .forBrowser('firefox') 
     .build(); 
    driver.get("file:///home/myhtml.html"); 
    test.after(function() { 
    driver.quit(); 
}); 

before(function(done){ 
    driver.findElement(By.id("Tabs")).then(function(e){ 
     e.findElements(By.tagName("li")).then(function(b){ 
      console.log("before got tabs length " + b.length); 
      tabs=b; 
      done(); 
     }); 
    }); 
}); 
test.it("we have some tabs",function(done){ 
    assert.strictEqual(tabs.length,6); 
    console.log("we have tabs " + tabs.length); 
    done(); 
}); 
test.it("can find a tab name",function(done){ 
    var span; 
    for(var i=0;i<tabs.length;i++){ 
     tabs[i].findElements(By.tagName("span"))  
        .then(function(span){ 
         console.log("Field??" + span.getText()); 
         //return span; 
         done(); 
        }); 
    } 
});)}; 

...私はこれを持っているスニペット私test.jsで

<div id="Tabs"> 
    <ul> 
     <li> <span> one </span></li> 
     <li> <span> two </span></li> 
     ... 
     <li> <span> six </span></li> 
    </ul> 
    </div> 

ですこのエラー

1 failing

1) MYHtml can find tab name: TypeError: span.getText is not a function

と私は、Liを見つけようとしています - = 2 スパンテキストで例えばので、私はそれをクリックすることができます。

答えて

0

あなたはスパン項目の配列を返し当時とそうで約束を解決しました。あなたは配列が返された後のgetText()を使用する必要があります。

tabs[i].findElements(By.tagName("span"))  
      .then(function(spanArray){ 
       console.log('Found spans length:'+ spanArray.length); 
       spanArray.forEach(function(nextElement) { 
        nextElement.getText().then(function(text) { 
         console.log('Text Found' + text); 
         // An if then check is required here so only 
         // one done is called. 
         if (/*---your condition here ---*/) { 
          done(); 
         } 
        }); 
       }); 
      }); 

EDITコード配列に対処するには、上記改定し、各要素を処理スニペット。

さらなるコメント XPATHアプローチに関する@sferretコメントの追加。あるいは必要なコードと処理の量を最小限に抑えることができるXPATHを使用

var tab=driver.findElement(By.xpath(".//div[@id='Tabs']/ul/li/span[contains(.,'two')‌​]")); 

しかしケアのXPathとして解釈されるべきではすぐに起因例でシフトスパンまたはDIVにメンテナンス上の問題になることができます。あなたは何がページ内で変化し、それに応じて行動するかを考慮する必要があります。時間の経過とともに変化しない少量のJSコードは、ページ内にタブが配置されているため、理論上は毎週変更できるxPathsよりも負担が大きくなります。

+0

悲しいことに、私はまだ悲しいことにTypeError:tabs [i] .findElements(...)を取得しています。getTextは関数ではありません – sferret

+0

この回答にはいくつか問題があります。 1つの大きな問題は、この非同期コードが完全に( 'done'を呼び出すか、または約束を返すことによって)行われたときに、Mochaに指示するための規定がないことです。 – Louis

+0

done()をコードに戻しました。間違って削除されました。元のテストに戻って明らかに@sferretは、単一の値( 'タブ名を見つけることができます')が必要であることを示唆しているので、スパンの配列から必要なものを決定する必要があります。 – PeterS

関連する問題