本文讲述了Java 教程——基于Java的Selenium自动化问题汇总!具有很好的参考价值,希望对大家有所帮助。一起跟随六星小编过来看看吧,具体如下:
本篇文章并没有任何逻辑,也并未要说明哪个专业的技术知识,就是将平时遇到的大大小小的问题汇总下来,相当于上学时候的纠错本吧!
WebDriver cannot
be resolved to a type
当你创建一个Maven项目,准备大干一场,开始写selenium自动化代码时,写了一行WebDriver就报错了WebDriver cannot be resolved to a type,这时对于自学的你来说,真的好焦虑。
原因嘛很简单,多半是因为你没有导入包......
在Maven的pom.xml文件中增加如下代码,然后再引入import org.openqa.selenium.WebDriver包即可。
<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.0.1</version>
</dependency>
代码没有任何问题,且时好时坏
在调试时,代码有时能跑通,有时跑不通,多半是没有定位到对应的元素,需要增加延时等待。
Selenium中延时等待分为三种:普通等待、显式等待和隐式等待。
01
最直接普通的等待
设置固定时间进行等待。
优点:使用非常简单。
缺点:
1.浪费时间;
2.无法保证页面一定加载完成;
3.使用过于固定,一个流程中会要频繁使用,造成代码的重复非常高;
4.正常情况下,一般不使用强制等待。
try {
Thread.sleep(time);
} catch (InterruptedException e) {
e.printStackTrace();
}
02
隐式等待
就是在创建driver时,为浏览器对象创建一个等待时间,这个方法是得不到某个元素就等待一段时间,直到拿到某个元素位置。
设置一个全局的等待,该等待设置,对于整个driver的生命周期都能起到作用,每一次操作都是调用隐式等待。
隐式等待等待结束的标志:
1.页面全部加载完成;
2.设置的等待时间截止。
优点:不用频繁的进行等待的添加,一次添加终生有效,不会浪费过多的时间在等待中。
缺点:
1.无法对指定的元素进行等待;
2.浪费一定的时间。
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS)
driver.get('http://www.baidu')
当脚本执行到某个元素定位时,如果元素可以定位,则继续执行,如果元素定位不到,则它将以轮询的方式不断地判断元素是否被定位到。
假设在第六秒定位到了元素则继续执行,若直到超出设置的时长10秒还没有定位到元素,则抛出异常。
03
显式等待
要等待的元素没有在规定的时间内出现,则抛出异常。
对指定的元素进行等待,通过设置最大等待时间,检查频率对页面的元素进行等待,一旦找到元素,则停止等待,进入后续步骤。
new WebDriverWait(driver, 15).until(
ExpectedConditions.presenceOfElementLocated(By.id("kw"))
)
自动化中如何处理唯一性的校验
我想大家都遇到过,系统中经常对一些字段进行唯一性校验,在自动化时,若没有修改输入的内容,脚本会出现错误,如何处理这种情况呢?很简单,输入的内容之后加上当前的系统时间。
//创建一个date format对象
DateFormat dateformat = new SimpleDateFormat("yyyyMMdd-HHmmss");
//利用Date()获取当前时间
Date date = new Date();
//格式化时间,并存储到String变量中
String s = dateformat.format(date);
String ProjectName = "AUTO测试项目" + s;
//定位元素并输入内容
driver.findElement(By.id("xxxxx")).sendKeys(ProjectName);
如何定位属性一样的div、span元素
在Selenium定位元素时,有的div、span元素除了文字信息,其他都是一样的,如下图所示:
如何定义如图所示的元素:
driver.findElement(By.xpath("//span[text()=\"秦皇岛市\"]")).click();
//如果是div的话,将span换成div就行
读取properties中的文件乱码
在读取配置文件时,其中包含中文会出现乱码,在读取的时候使用BufferedReader去读取,能有效的解决此类问题。
Properties properties=new Properties();
try {
InputStream inputStream = new FileInputStream(filePath);
BufferedReader in = new BufferedReader(new InputStreamReader(inputStream));
properties.load(in);
} catch (IOException e) {
e.printStackTrace();
}
return properties;
}
更多相关技术内容咨询欢迎前往并持续关注六星社区了解详情。
想高效系统的学习Java编程语言,推荐大家关注一个微信公众号:Java圈子。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Java入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!