java-testng-selenium优化

由于项目中webui测试的需要,是用testng+selenium的方式,其中遇到过几个问题,记录下,方便以后查看

1.重复运行多次case

因为是selenium,所以有的时候需要运行多次,方法是写一个Retry的类,继承testng的retry类就可以。

public class Retry implements IRetryAnalyzer {
    private int retryCount = 0;
    private int maxRetryCount = 3;

    public boolean retry(ITestResult result) {

        if (retryCount < maxRetryCount) {
            retryCount++;
            System.out.println(String.format("test failed!try %d time!",retryCount+1));
            return true;
        }
        return false;
    }
运行的时候就在case上加上
@Test(retryAnalyzer=Retry.class)
就可以拉

 2.自定义annotions

虽然testng自带有很多注释,很好用,但是在项目中,组长要求在每个case前面能够描述一下这个case的作用,以后当case失败的时候,可以输出这个case的作用和失败原因,要外人不看代码也可以看的懂,所以就想自定义一个annotation,添加个decsription属性。

 1 //UIMessage.java
 2 import static com.myhexin.common.Assert.AssertEquals;
 3 
 4 import java.lang.annotation.Retention;
 5 import java.lang.annotation.RetentionPolicy;
 6 import java.lang.annotation.Target;
 7 import java.lang.annotation.ElementType;
 8 
 9 import org.testng.annotations.Parameters;
10 import org.testng.annotations.Test;
11 @Retention(RetentionPolicy.RUNTIME)
12 @Target({ElementType.METHOD})
13 public @interface UIMessage {
14      String description();
15 }
16 
17 //应用
18 @UIMessage(description = "我是来试试的")@Test(retryAnalyzer=Retry.class)
19 @Parameters()
20 public void testDengLuZhangHao(){
21 /*
22  * 函数体
23  */
24 }    
25 //如何获取annotation的注释消息,我是用反射来获取的
26 
27 Method[] methods=Class.forName("core.Member").getDeclaredMethods();
28             for(Method method:methods)
29            {
30                  if(method.isAnnotationPresent( UIMessage. class))
31                 {
32                      System. out.println(method.getAnnotation( UIMessage. class).desciption());
33                 }
34            }

 3.selenium截图

目前该截图方式当在remote执行selenium时候,我只是在firefox下成功过,ie打死不行,场景是当case运行失败的时候截图,主要是重写下assert,当断言失败时候,截图,直接上,截图的代码

    public  void screenShot(WebDriver driver,int i)
    {
            String dir_name="./pic";
          if (!(new File(dir_name).isDirectory())) {  // 判断是否存在该目录
             new File(dir_name).mkdir();  // 如果不存在则新建一个目录
          }
         
          SimpleDateFormat sdf = new SimpleDateFormat("-HHmmss");
          String time = sdf.format(new Date()); 
         WebDriver augmentedDriver = new Augmenter().augment(driver);
        
          try {
             File screenshot = ((TakesScreenshot)augmentedDriver).getScreenshotAs(OutputType.FILE); // 关键代码,执行屏幕截图,默认会把截图保存到temp目录
             FileUtils.copyFile(screenshot, new File(dir_name + File.separator + i+ time  + ".png"));  // 这里将截图另存到我们需要保存
          } catch (IOException e) {
             e.printStackTrace();
          }
    }

 

 

转载于:https://www.cnblogs.com/xiamuyouren/p/3272931.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值