selenium显示等待解决浏览器未加载完成查找控件的问题
问题描述:wap版支付成功后,跳转到支付成功页,查找的元素已出现,如图的:元素1,元素2,但是提示查找的元素超时,失败,并且每到这个页面都会报页面超时,不能查找到页面元素

原始代码:
try{
op.actionSingleClick("PlaceYourOrderBtn"); //点击确认提交支付按钮
Page.pause(4);
} catch (Exception e) {
e.printStackTrace();
}
String successMsg1 = op.loopGetElementText("successMsg1", 10, 60); .//获取支付成功提示
Log.logInfo("支付成功提示为:"+successMsg1);.
actionSingleClick内容:
public void actionSingleClick(String elementStr) throws Exception {
boolean res = false;
boolean printFlag = true;
int loopTimes = 3;
for (int i = 1; i <= loopTimes; i++) {
try {
WebElement element = MyWebDriverWait2(elementStr, explicitWaitTimeoutLoop, false, false);
action.moveToElement(element).click().perform();
Thread.sleep(1000);
res = true;
break;
} catch (Exception e) {
if (printFlag) {
e.printStackTrace();
printFlag = false;
}
Log.logWarn("模拟鼠标操作时发生异常(" + GetMethodName() + ").");
}
}
if (!res) {
Log.logWarn("连续 " + loopTimes + " times,模拟鼠标操作发生异常.");
throw new RetryException();
}
}
执行后报错提示如下:
timeout: cannot determine loading status
连续 3 times,模拟鼠标操作发生异常.
提示在点击确认按钮“PlaceYourOrderBtn”就已经出错,但是错误截图是在已支付成功的页面
本地测试,发现控件有时能查找到,有时查找不到,原因能查找到的元素时,顶部的进度条已完成,而没有查找到控件时,顶部进度条,一直在是80%呈未加载完成的状态,类似如图

思路方案:
方案1,使用selenium的隐时页面等待:
try{
driver.manage().timeouts().implicitlyWait(25, TimeUnit.SECONDS);
op.actionSingleClick("PlaceYourOrderBtn"); //点击确认提交支付按钮
Page.pause(4);
} catch (Exception e) {
e.printStackTrace();
}
String successMsg1 = op.loopGetElementText("successMsg1", 10, 60);
Log.logInfo("支付成功提示为:"+successMsg1);.//获取支付成功提示
意思是:总共等待25秒, 如果25秒后,元素还不存在,就会抛出异常 org.openqa.selenium.NoSuchElementException
隐式等待相当于设置全局的等待,在定位元素时,对所有元素设置超时时间。
发现这个隐时等待没用,设置了足够的时间还是没有找到,不能解决问题,
方案2:想通过页面的加载状态,页面在规定时间内加载不成功,就在刷新
try {
driver.manage().timeouts().pageLoadTimeout(60,TimeUnit.SECONDS)
op.actionSingleClick("PlaceYourOrderBtn"); //点击确认提交支付按钮
Page.pause(4);
} catch (Exception e) {
e.printStackTrace();
}
String successMsg1 = op.loopGetElementText("successMsg1", 10, 60);
Log.logInfo("支付成功提示为:"+successMsg1);.//获取支付成功提示
意思是:页面加载超过60S报错,并重新进行页面刷新
想当页面加载超过60S,报错,并重新刷新页面,当时设置过刷新页面3次,这个偶尔好使,但网络慢时,刷新3次或者4次都不管用
方案3:显示等待
try{
op.actionSingleClick("PlaceYourOrderBtn"); //点击确认提交支付按钮
Page.pause(4);
} catch (Exception e) {
Log.logInfo("点击提交按钮,页面超时了,但是页面已经显示了支付成功页,继续执行下一步");}
try {
wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("#mainWrap> div.msg-page > p")));//先判断是否存在,存在就打印下面一句,不存在就报错
Log.logInfo("成功进入支付成功页面!!!");
} catch (Exception e) {
e.printStackTrace();
Log.logError("进入支付成功页面失败!!!,不进行下一步操作");
}
String successMsg1 = op.loopGetElementText("successMsg1", 10, 60);
Log.logInfo("支付成功提示语为:"+successMsg1);
.
当页面加载很慢时,使用显示等待:等到需要操作的那个元素加载成功之后就直接操作这个元素,不需要等待其他元素的加载
意思是:当点击按钮后跳转到另外一个页面,页面还是在加载中,默认是60s,页面加载已超时,但是页面上已经出现了需要查找的控件,等待报错后,还会继续执行,如果成功页面的提示在10s内有这个元素,继续执行下一步,就解决页面没有加载完,找不到元素的问题
|
等待的条件 |
WebDriver方法 |
|
页面元素是否在页面上可用和可被单击 |
elementToBeClickable(By locator) |
|
页面元素处于被选中状态 |
elementToBeSelected(WebElement element) |
|
页面元素在页面中存在 |
presenceOfElementLocated(By locator) |
|
在页面元素中是否包含特定的文本 |
textToBePresentInElement(By locator) |
|
页面元素值 |
textToBePresentInElementValue(By locator, java.lang.String text) |
|
标题 (title) |
titleContains(java.lang.String title) |
selenium显示等待解决浏览器未加载完成查找控件的问题的更多相关文章
- ASP.NET MVC中加载WebForms用户控件(.ascx)
原文:ASP.NET MVC中加载WebForms用户控件(.ascx) 问题背景 博客园博客中的日历用的是ASP.NET WebForms的日历控件(System.Web.UI.WebControl ...
- asp.net动态加载ascx用户控件
原文:asp.net动态加载ascx用户控件 在主aspx/ascx文件中,将目标ascx1,ascx2控件拖拉到其页面中,然后删除,目的是要生成:Register 代码,然后在主文件中定义DIV或T ...
- 文本溢出显示省略号,CSS未加载时a标签仍可用处理方法
一.文本溢出打点 (1)单行文本 overflow: hidden; text-overflow:ellipsis; white-space: nowrap; (2)多行文本 overflow : h ...
- 首次加载进来DEV控件列表第一行颜色总是不对,后台代码显示的数据正确
1:行改变的颜色正确的颜色: 1.1颜色效果如下图: 1.2:设置行改变颜色: 2:结果首次加载第一行颜色为: 3:解决方案: 3.1 :Views-->OptionsSelection --& ...
- 将OpenCV捕获的摄像头加载到picture控件中
CRect rect; CStatic* pStc; CDC* pDC; HDC hDC; pStc = (CStatic*)GetDlgItem(IDC_CAM);//IDC_CAM是Picture ...
- ifc构件加载到树形控件中
void IfcTreeWidget::setParentCheckState(QTreeWidgetItem *item) { if(!item) return; ; int childCount ...
- 解决ListView异步加载图片错乱问题 .
发一个异步图片加载控件.网上也有大把的异步网络加载图片的控件,但是有一个问题,异步加载会造成列表中的图片混乱,因为列表的每一项的View都可能被重用,异步加载的时候多个异步线程引用到了同一个View将 ...
- Selenium截屏 图片未加载的问题解决--【懒加载】
需求: 截屏后转PDF. 问题: selenium截屏后,图片未加载 如下图: 原因: 网站使用了懒加载技术:只有在浏览器中纵向滚动条滚动到指定的位置时,页面的元素才会被动态加载. 什么是图片懒加载? ...
- js图片未加载完显示loading效果
<html> <title>js图片未加载完显示loading效果</title> <body> <style> img{float:lef ...
随机推荐
- PS2018学习笔记(25-29节)
25-亮度与色阶看懂直方图-part1 # 本节知识点: 灰度模式 明暗对比 明度/对比度命令 直方图 色阶命令 调整图层 # 本节段落表: 了解亮度对比 灰度模式观察明暗 明度/对比度命令 认知对比 ...
- pb_ds的优先队列实现dijkstra
用pb_ds的优先队列来做dijkstra..据说noip能用哟. 先来篇关于仿函数的文章. 由于pb_ds支持由迭代器访问元素,并且push操作会返回一个迭代器,merge操作会更新迭代器,相当于帮 ...
- hdu 1847 Good Luck in CET-4 Everybody!(巴什博弈)
Good Luck in CET-4 Everybody! HDU - 1847 大学英语四级考试就要来临了,你是不是在紧张的复习?也许紧张得连短学期的ACM都没工夫练习了,反正我知道的Kiki和Ci ...
- FJOI2019全记录(福建省选)
Day 0 最后一个早上,早读完后就到机房里,复习了左偏树和计算几何,然后真的不知道还要做什么了(FFT和一些数论的结论昨天复习过了 也许还要去学一点新东西(?),像Krusk重构树什么的.(一直没有 ...
- Filter&Listener
Filter&Listener 内容待补充... ...
- 洛谷 P1547 Out of Hay (最小生成树)
嗯... 题目链接:https://www.luogu.org/problemnew/show/P1547 思路: 嗯...既然题中已经说了是最小生成树,那么是需要在最小生成树的模板上稍作修改即可.要 ...
- c语言中malloc函数的使用
传送门:https://www.cnblogs.com/shiweihappy/p/4246372.html c语言中内存的管理:https://www.cnblogs.com/tuhooo/p/72 ...
- windows驱动环境配置vs2010+wdk7600
安装wdk后 要勾选集成VSIX选项到vs里面,不然vs里面新建项目时候找不到windows Driver 最简单的方式是安装wdk7600+vs2010+VisualDDK-1.5.7 这三个软件 ...
- 原生JS轮播-各种效果的极简实现
寒假持续摸鱼中~此为老早以前博客的重写,当时还是分开写的,这里汇总重写,正好复习一遍~ 春招我来了! 所有有意思的,一股脑先扔进收藏,然后再也不看哈哈,真是糟糕. 今日事,今日毕,说起来容易. 当时竟 ...
- DHCP原理和配置
在大型网络中,会有大量的主机和设备需要获取ip地址和网络参数,为了解决手动配置的工作量大.ip冲突问题,因此需要使用DHCP(dynamic host configuration protocol). ...