错误:超出50000ms的超时

时间:2018-01-10 11:19:17

标签: javascript selenium selenium-webdriver automation promise

我正面临着这样的问题: 测试        "在每个"之前hook:ret for" Test Case":      错误:超出50000ms的超时。对于异步测试和挂钩,请确保" done()"叫做;如果返回Promise,请确保它已解决。

2)测试        "在每个"之后hook:ret for" Test Case":      错误:超出2000毫秒的超时。对于异步测试和挂钩,请确保" done()"叫做;如果返回Promise,请确保它已解决。

        var webdriver=require('selenium-webdriver');
var By=require('selenium-webdriver').By;
var until=require('selenium-webdriver').until;

//this requires to include the mocha describe,each.....
var test = require('selenium-webdriver/testing');

var fs=require('fs');

var chrome = require('selenium-webdriver/chrome');
var path = require('chromedriver').path;

var service = new chrome.ServiceBuilder(path).build();
chrome.setDefaultService(service);

var driver = new webdriver.Builder()
    .withCapabilities(webdriver.Capabilities.chrome())
    .build();


test.describe( 'Test' , function(){

    test.beforeEach(function(){
        this.timeout(50000); 

        driver.get('https://staging.keela.co/login');

    });

    test.afterEach(function(){
        driver.quit();
    });

    test.it( 'Test Case' , function(){
    this.timeout(50000);
  setTimeout(done, 4000);
        // driver.findElement(webdriver.By.xpath('//*[@id="login-email"]')).then(function(title){
        //     title.sendKeys("bandana@yopmail.com");

     driver.wait(until.elementLocated(By.name('login-email'))).then(function(email){
     email.sendKeys('bandanakeela@gmail.com');

     driver.wait(until.elementLocated(By.name('login-password'))).then(function(pw){
     pw.sendKeys('123456789');
        });

     driver.findElement(webdriver.By.linkText("Log In")).click();

        });
    });

});

2 个答案:

答案 0 :(得分:0)

我注意到页面打开的时间与登录表单可用于交互的时间之间存在相当大的延迟。您的代码不会等待控件变为可单击。

我不知道你用Javascript做这件事的方式,但在Python中,你会使用WebDriverWait对象。

顺便说一句,使用" id"可能更可靠。属性,而不是" name"。

答案 1 :(得分:0)

有几个事实:

  • Email字段的定位器更改为:

    return driver.findElement({xpath:"//input[@class='form-control' and @id='login-email']"});
    
  • Password字段的定位器更改为:

    return driver.findElement({xpath:"//input[@class='form-control' and @id='login-password']"});
    
  • 网页上的元素,例如在 Email 实现后,Passworddocument.readyState === "complete"字段会被渲染一段时间。因此,WebDriverWait字段的 Email ExpectedConditions设置为 elementToBeClickable(By locator)

    (Java)
    WebElement my_email = new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//input[@class='form-control' and @id='login-email']")));