簡體   English   中英

Selenium.webdriver試圖找到選項卡文本值

[英]Selenium.webdriver trying to find a tab text vaue

嗨,我正在使用mocha和node js,並且正在嘗試使硒webdriver工作。 該應用程序是SPA。 我要做的就是獲取一個特定的選項卡,然后單擊它。 我已經將HTML加載到測試中了。 這是一個片段

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

在我的test.js中,我有這個...

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();
                    });
    }
}); )};

它通過“我們有一些選項卡”,但是失敗“可以找到選項卡名稱”,並出現此錯誤

1個失敗

1)MYHtml可以找到選項卡名稱:TypeError:span.getText不是函數

我正在嘗試找到li-例如,span文本= 2,所以我可以單擊它。

到那時,您已經解決了promise,因此返回了一組span項。 返回數組后,應使用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')‌​]"));

但是,應小心,因為示例中的跨度或div移位會導致xpath迅速成為維護問題。 您必須考慮頁面中可能發生的變化並采取相應措施。 很少有更多的JS代碼會隨着時間的推移而變化,這比理論上由於標簽在頁面中的位置每周可能會變化的xPath的負擔更大。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM