我正在使用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.
为什么我会得到这样的输出?
标题应该是不同的。
请帮忙。
答案 0 :(得分:0)
在点击之前尝试等待元素显示。当您说显示状态为true
时,selenium会在抛出错误之前等待几秒钟(默认超时间隔),同时显示元素,因此它在控制台中打印为true。要单击所需元素,请先等待它显示。这是怎么做的 -
var ele = driver.findElement(By.xpath(minorMenuXPath));
driver.wait(function() {
return ele.isDisplayed();
}, 20000)
.then(function(){
ele.click();
});
希望这有帮助。