在selenium-webdriver和phantomJS中等待超时错误

时间:2015-09-03 07:56:43

标签: javascript selenium selenium-webdriver phantomjs mocha

我正在使用selenium-webdriver,phantomJS和mocha编写自动化测试脚本。

我的脚本文件本质上是javascript文件。

我想等到元素()变得完全可见。在它变得可见之后,将点击该元素。

让我详细解释一下:

有一些菜单和子菜单。菜单本质上是可折叠的。当我单击菜单时,会显示相应的子菜单。

我的下面的脚本首先通过菜单迭代(并点击),然后迭代并(应该)点击子菜单。

for(var iMajor = 2; iMajor <= majorLinkLast ; iMajor++)
{   
    (function(iMajor){
        majorMenuXPath = "//ul[contains(@id, 'side-menu')]/li["+iMajor+"]/a";
        if(iMajor != 2)
        {
            driver.findElement(By.xpath(majorMenuXPath)).click().then((function(iMajor){
                for(var iMinor = 1; iMinor <= minorSize[iMajor] ; iMinor++)
                {
                    (function(iMajor, iMinor){
                        minorMenuXPath = "//ul[contains(@id, 'side-menu')]/li["+iMajor+"]/ul/li["+iMinor+"]/a";
                        driver.findElement(By.xpath(minorMenuXPath)).then(function(eleMinor){
                            driver.wait(function(){
                                    return eleMinor.isDisplayed();
                                }, 20000).then(function(){
                                    eleMinor.isDisplayed().then(function(stat){
                                    console.log(stat);
                                });
                            });
                        });
                    })(iMajor,iMinor)
                }
            })(iMajor));
        } 

    })(iMajor)
}

但是我收到这样的消息:

Track Revenue
Track Revenue
Track Revenue
Track Revenue
Track Revenue
Track Revenue
Campaigns
    1) View page by clicking menu


  2 passing (1m)
  1 failing

  1) TrackRevenue Click Menu Test View page by clicking menu:
     Error: timeout of 50000ms exceeded. Ensure the done() callback is being cal
led in this test.

为什么我会得到这样的输出?

标题应该是不同的。

请帮忙。

1 个答案:

答案 0 :(得分:0)

在点击之前尝试等待元素显示。当您说显示状态为true时,selenium会在抛出错误之前等待几秒钟(默认超时间隔),同时显示元素,因此它在控制台中打印为true。要单击所需元素,请先等待它显示。这是怎么做的 -

var ele = driver.findElement(By.xpath(minorMenuXPath));
driver.wait(function() {
    return ele.isDisplayed();
}, 20000)
.then(function(){
    ele.click();
});

希望这有帮助。