永发信息网

testng如何实现等待

答案:1  悬赏:50  手机版
解决时间 2021-04-26 17:36
testng如何实现等待
最佳答案
Selenium的延迟等待分为 显式等待(Explicit Wait) & 隐式等待(Implicit Wait).
1.显式等待
显式等待,就是明确的要等到某个元素的出现或者是某个元素的可点击等条件,等不到,就一直等,除非在规定的时间之内都没找到,那么就跳出Exception.
如:
new WebDriverWait(driver, 15).until(
ExpectedConditions.presenceOfElementLocated(By.cssSelector("css locator"))
);

这里,15是要等待的秒数.如果没有满足until()方法中的条件,就会始终在这里wait 15秒,依然找不到,就抛出异常.
也可以这样写:

WebDriver driver = new FirefoxDriver();
driver.get( http://somedomain/url_that_delays_loading);WebElement e = (new WebDriverWait( driver, 10)) .until( new ExpectedCondition< WebElement>(){ @Override
public WebElement apply( WebDriver d) { return d.findElement( By.id("id locator"));
}
}
);

这样就通过回调函数,直接获得了这个WebElement.也就是页面元素.
如果只是仅仅想判断页面是不是加载到某个地方了,就可以用第一种方法; 但如果需要得到某个WebElement,两种方式都可以,只是第一种方式还需要再多一步获取的操作.
Wait w = new Wait(){ @Override
public boolean until() { return webElement.isDisplayed();
}
};

另外这种等待的方式,在加载js代码的时候做判断会比较方便,反正我只在代码里这么见过,但是没用过,有兴趣的朋友可以研究一下.
2.隐式等待
隐式等待,我觉得就是不靠谱的等待,看一段代码就明白了.
driver.manage().timeouts().implicitlyWait(second, TimeUnit.SECONDS);

WebDriver会进行一个隐式等待,但参数只有时间,这就导致我需要什么元素出现,我不一定能等到它,只是让driver延迟一段时间再继续而已. 不过我们也可以把它小小的封装一下,变废为宝:
public boolean isByElementDisplayed(By by, int time) { boolean status = false; if (driver.findElement(by).isDisplayed() == false) {
driver.manage().timeouts().implicitlyWait(time, TimeUnit.SECONDS);
} else {
status = true;
} return status;
}
得不到某个元素,我们就延迟一下...
最后还有一个最低效的做法:
Thread.sleep()

额,不建议使用.
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
电脑中毒了
棉花洲怎么去啊,有知道地址的么
是不是每类人都会有适合自己的活动区域?是这
DNF里白手残影怎么拉啊?
现在A2的驾照是不是2年一审?
吉林警察学院法律事务
武林外传精炼装备
陈西村我想知道这个在什么地方
职校毕业生毕业寄语,职业学校优秀毕业生报告
请问木雕要用什么上色才能防止遇到水掉颜色?
小鱼为啥不腥而大鱼腥
哪个明星演电视最难看?
求藏头诗一首,用宋俊豪
小锅子没信号,收不到台,怎么回事…
求助,倒栽枸杞已经一个月了,为什么都长根了
推荐资讯
现在在游戏中 好友和战队都能看见了 什么时候
关于从沙坪坝坐车到杨家坪动物园怎么走
谁空间有很多关于星座的日志?最好是:巨蟹、
求柯南NEWS杂志社那集
我要刷固件,请把纽曼NUNU X7固件发到我的邮
以“品味书香,诵读经典”为话题写作文
写出振动和波动方程(假设波沿x轴正方向传播
贵州师范学院招生热线
请问一千块以下若基亚非智能手机有哪几款?
诺基亚5530这款机子实用吗?
华硕品质 到底是不是坚若磐石哦?
2008年1、2月雪灾的结果
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?