page contents

Java 教程——基于Java的Selenium自动化问题汇总

本文讲述了Java 教程——基于Java的Selenium自动化问题汇总!具有很好的参考价值,希望对大家有所帮助。一起跟随六星小编过来看看吧,具体如下:

attachments-2023-07-75zMQlIa64bdd3966cca0.png

本文讲述了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元素除了文字信息,其他都是一样的,如下图所示:

attachments-2023-07-gBkjEbPq64bdd2fc18f03.png

如何定义如图所示的元素:

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入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2023-03-2AoKIjPQ64014b4ad30a3.jpg

  • 发表于 2023-07-24 09:28
  • 阅读 ( 137 )
  • 分类:Java开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
轩辕小不懂
轩辕小不懂

2403 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1312 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章