Java+selnium 智能等待,try catch方法智能定位需添加等待的元素
时间:2022-07-23
本文章向大家介绍Java+selnium 智能等待,try catch方法智能定位需添加等待的元素,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
智能等待,try catch方法智能定位需添加等待的元素
常用的三种等待
- 强制等待
Thread.sleep(3000);
- 隐式等待
//隐式等待 10秒
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
- 显示等待
//显式等待
long time = 10;
//element是变量
new WebDriverWait(driver.getDriver(), time).until(ExpectedConditions.visibilityOf(element));
三种等待依然不够给力
上面的三种方法可以解决大部分的等待问题,但是很多时候要用强制等待的时候不好掌握时长的设置,设短了还会报错,影响调试步骤,设长了影响执行效率,那么此时可以利用下面封装的click的方法,智能等待,根据输出结果合理添加等待时长,不影响写代码的进度
public void clickname(String ele) throws InterruptedException {
List<WebElement> elelist = elements(ByMethon.bystr(ele));//获取该名称对应的列表
WebElement element = null;
long time = 3;
if (elelist.isEmpty()) {
Thread.sleep(800);
elelist = elements(ByMethon.bystr(ele));
if (!elelist.isEmpty()) {
element = elelist.get(0);//获取该名称对应的第一个元素
element.click();
}
else {
driver.refresh();
clickname(ele);
System.out.println("========================"+ele + " 未找到,重新执行========================");
}
} else {
element = elelist.get(0);//获取该名称对应的第一个元素
try {
Thread.sleep(200);
element.click();
} catch (WebDriverException e) {
Thread.sleep(1500);
autoScreenShot.ScreenShot("等待时长不足");
Log.warn("======" + ele + " 二次执行操作,建议加时等待==========");
try {
element.click();
} catch (Exception e1) {
driver.refresh();
Thread.sleep(100);
Log.warn("======" + ele + " 刷新一次,建议检查页面==========");
Thread.sleep(1500);
try {
elelist = elements(ByMethon.bystr(ele));
element=elelist.get(0);
element.click();
} catch (Exception e2) {
Thread.sleep(1500);
element.click();
System.out.println("第三次执行");
}
}
}
}
}
public static By bystr(String PropertiesKey){
String PropertiesPath = "LoginElement.properties";
//创建ReadProperties对象
ReadProperties properties = new ReadProperties(PropertiesPath);
String value = properties.getValue(PropertiesKey);
//对value进行拆分
String LocateMethod = value.split("<>")[0];
String LocateEle = value.split("<>")[1];
//System.out.println(LocateMethod+"========="+LocateEle);
if(LocateMethod.equalsIgnoreCase("id")){
return By.id(LocateEle);
}else if(LocateMethod.equalsIgnoreCase("name")){
return By.name(LocateEle);
}else if(LocateMethod.equalsIgnoreCase("tagNmae")){
return By.tagName(LocateEle);
}else if(LocateMethod.equalsIgnoreCase("linkText")){
return By.linkText(LocateEle);
}else if(LocateMethod.equalsIgnoreCase("xpath")){
return By.xpath(LocateEle);
}else if(LocateMethod.equalsIgnoreCase("cssSelector")){
return By.cssSelector(LocateEle);
}else{
return By.partialLinkText(LocateEle);
}
}
执行结果如下图
- 简单科普云计算相关内容
- Silverlight初级教程-开发工具
- WCF的Binding模型之五:绑定元素(Binding Element)
- 2018年物联网发展趋势
- Silverlight初级教程-概述
- WCF的Binding模型之四:信道工厂(Channel Factory)
- 如何做一个好的前端重构工程师
- 云计算是否真的对企业来说无所不能?
- 科协带你开个2017年科技世界的总结会!
- 基于StockRanker算法的机器学习量化策略
- Enterprise Library深入解析与灵活应用(6):自己动手创建迷你版AOP框架
- 交易费用过高的比特币还能成为“未来货币”吗?
- 应用大数据,做好技术成果市场价值评估
- Linux和Windows的换行符
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- python 技术篇-时间戳的获取,记录程序处理时间
- 基于SpringBoot AOP面向切面编程实现Redis分布式锁
- Python+Selenium 技巧篇-svg标签内元素的xpath定位方式
- 小书MybatisPlus第5篇-Active Record模式精讲
- Python 语法问题-module ‘pip._internal‘ has no attribute ‘pep425tags‘. 原因及解决办法,32位、64位查看pip支持万能方法
- 总在说 Spring Boot 内置了 Tomcat 启动,那它的原理你说的清楚吗?
- JavaScript 技巧篇-js增加延迟时间解决单击双击事件冲突,双击事件触发单击事件
- Python 技术篇-sha256()加密的使用方法,sha1、md5加密方法
- Python 技术篇-如何打印一段文字,用友云霸气控制台颜文字打印
- Python 技术篇-获取秒级时间戳、毫秒级时间戳
- Python 技术篇-基于随机数的uuid码的生成
- BAT 脚本技术-利用bat批处理脚本静态指定ip地址、自动获取ip地址设置
- Oracle 技巧篇-快速批量删除当前数据库连接的用户,一键清空所有session会话方法
- Spring Security 中如何细化权限粒度?
- 小书MybatisPlus第4篇-表格分页与下拉分页查询