2016-02-19 33 views
0

我想确认这是在“谷歌搜索框中输入”如何使用Selenium使用的是Node.js和摩卡柴

当我运行在节点下面的代码输入的字符串,以验证在搜索框中输入的字符串。 JS它抛出以下错误:

Error: timeout of 2000ms exceeded. Ensure the done() callback is being called in this test. 

这里是我的代码:

var assert = require('assert'), 
    test = require('selenium-webdriver/testing'), 
    webdriver = require('selenium-webdriver'); 

test.describe('Google Search', function() { 
    test.it('should work', function(done) { 
     var driver = new webdriver.Builder(). 
      withCapabilities(webdriver.Capabilities.firefox()). 
      build(); 

     driver.get('http://www.google.com'); 

     var searchBox = driver.findElement(webdriver.By.name('q')); 
     searchBox.sendKeys('simple programmer'); 
     searchBox.getAttribute('value').then(function(value) { 
      assert.equal(value, 'simple programmer'); 
     }); 
     driver.quit();done(); 
    }); 
}); 

我使用Node.js的5.6.0版本。

我在做什么错?

回答

0

问题是创建驱动程序需要2秒钟以上。您应该在before钩子中创建它(并将其销毁在after钩子中)。另外,当您使用test.it时,不需要使用done,因为您从selenium-webdriver/testing获得的内容不是摩卡股票,而是已修补以挂钩到Selenium控制流中的摩卡。您收到的错误消息是Mocha的股票错误消息,不幸的是,当您使用selenium-webdriver/testing时会引起误解。这是一个工作文件:

var assert = require('assert'), 
    test = require('selenium-webdriver/testing'), 
    webdriver = require('selenium-webdriver'); 

test.describe('Google Search', function() { 
    var driver; 
    test.before(function() { 
     driver = new webdriver.Builder(). 
      withCapabilities(webdriver.Capabilities.firefox()). 
      build(); 
    }); 

    test.after(function() { 
     driver.quit(); 
    }); 
    test.it('should work', function() { 
     driver.get('http://www.google.com'); 

     var searchBox = driver.findElement(webdriver.By.name('q')); 
     searchBox.sendKeys('simple programmer'); 
     searchBox.getAttribute('value').then(function(value) { 
      assert.equal(value, 'simple programmer'); 
     }); 
    }); 
});