【问题标题】:Error: Timeout of 50000ms exceeded错误:超过 50000 毫秒的超时
【发布时间】:2018-01-10 11:19:17
【问题描述】:

我正面临这样的问题: 测试 “在每个之前”钩子:ret for “测试用例”: 错误:超过 50000 毫秒的超时。对于异步测试和钩子,确保调用“done()”;如果返回一个 Promise,请确保它解析。

2) 测试 “在每个”钩子之后:“测试用例”的 ret: 错误:超过 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();

        });
    });

});

【问题讨论】:

  • 在定位元素之前添加等待。

标签: javascript selenium selenium-webdriver automation promise


【解决方案1】:

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

我不知道你会用 Javascript 怎么做,但在 Python 中,你会使用 WebDriverWait 对象。

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

【讨论】:

    【解决方案2】:

    几个事实:

    • 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']"});
      
    • 网页上的元素,例如在 document.readyState === "complete" 实现后,EmailPassword 字段将被渲染一段时间。因此,将Email 字段引入WebDriverWait,并将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']")));
      

    【讨论】:

    • 我试过了,但还是一样,我什至尝试过使用 webdriverjs mocha,但同样的错误
    • 查看https://stackoverflow.com/questions/46202283/exception-in-thread-main-org-openqa-selenium-nosuchelementexception-unable-to 您自己的问题 :) 如果对您有用,请支持该答案。在这种情况下,只需以Javascript 格式引入WebDriverWait
    • 现在,我正在尝试使用 webdriverjs mocha 并且在那里我遇到了类似的问题:错误:超过 50000 毫秒的超时。对于异步测试和钩子,确保调用了“done()”;如果返回 Promise,请确保它已解决。
    • 你能用完整的错误堆栈跟踪更新问题吗?
    猜你喜欢
    • 2021-12-31
    • 2017-04-15
    • 2019-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-30
    • 2022-06-14
    相关资源
    最近更新 更多