Selenium.webdriver试图查找标签文本vaue

时间:2016-05-11 19:44:50

标签: javascript selenium-webdriver mocha

您好我正在使用mocha和节点js,我正在努力让selenium 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();
                    });
    }
}); )};

它传递了&#34;我们有一些标签&#34; 但失败&#34;可以找到标签名称&#34;     有这个错误

  

1失败

     

1)MYHtml可以找到标签名称:        TypeError:span.getText不是函数

我试图找到li - 例如span text = 2   所以我可以点击它。

1 个答案:

答案 0 :(得分:0)

您已使用then解决了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();
                      }
                   });
                }); 
            });

编辑上面修改的代码段,以处理数组,然后处理每个元素。

进一步评论 添加关于XPATH方法的@sferret评论。

或者使用XPATH,它可以最大限度地减少代码和处理所需的数量:

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

但是应该注意,因为示例中的跨度或div移位,xpath很快就会成为维护问题。您必须考虑页面中可能发生的变化并采取相应措施。少量的更多JS代码不会随着时间的推移而变得比xPath更多的负担,理论上每周可能会因为选项卡放在页面中的位置而改变。