在用selenium做自动化测试时,由于各种不明原因,有时Chrome浏览器会出现假死的情况,也就是整个浏览器响应超时,本人脚本主要部署在Windows机器上,所以主要以Windows为主,浏览器为Chrome,即如下图所示
或者由于被测页面弹出alert弹框,程序没有做此处理,导致程序响应超时,浏览器无法关闭,当用jenkins上再次执行job时就会报错,即
如果出现这种问题,怎么处理呢,很简单直接去任务管理器,关闭chromedriver.exe这个进程即可,以及chrome.exe,当然,如果你办公方便,可以手动去关,但是万一你不在公司或者无法即时处理时怎么办呢?
不多说,直接上代码
1 import java.io.ByteArrayOutputStream; 2 import java.io.IOException; 3 import java.io.InputStream; 4 import java.util.Properties; 5 6 /** 7 * 检测chrome和chromedriver进程 8 * 9 * @author 作者:jinzy10 * @version 创建时间:2018年1月10日 下午2:59:32 类说明:11 */12 public class CloseProcess {13 14 public static void main(String[] args) {15 // TODO Auto-generated method stub16 findProcess("chrome.exe");17 findProcess("chromedriver.exe");18 }19 20 /**21 * 检测程序。22 * 23 * @param processName24 * 线程的名字,请使用准确的名字25 * @return 找到返回true,没找到返回false26 */27 public static boolean findProcess(String processName) {28 boolean flag = false;29 Properties props = System.getProperties();30 try {31 if (props.getProperty("os.name").contains("Windows")) {32 Process p = Runtime.getRuntime().exec("cmd /c tasklist ");33 ByteArrayOutputStream baos = new ByteArrayOutputStream();34 InputStream os = p.getInputStream();35 byte b[] = new byte[256];36 while (os.read(b) > 0) {37 baos.write(b);38 }39 String s = baos.toString();40 if (s.indexOf(processName) >= 0) {41 Runtime.getRuntime().exec("taskkill /im " + processName + " /f");42 flag = true;43 } else {44 flag = false;45 }46 }else {47 Process p = Runtime.getRuntime().exec(new String[]{"sh","-c","ps -ef | grep "+processName});48 ByteArrayOutputStream baos = new ByteArrayOutputStream();49 InputStream os = p.getInputStream();50 byte b[] = new byte[256];51 while (os.read(b) > 0) {52 baos.write(b);53 }54 String s = baos.toString();55 if (s.indexOf(processName) >= 0) { 56 String[] cmd ={"sh","-c","killall -9 "+processName};57 Runtime.getRuntime().exec(cmd);58 flag = true;59 } else {60 flag = false;61 }62 }63 } catch (IOException ioe) {64 }65 return flag;66 }67 }
可以将此代码放到项目中或者直接打包成jar包,配置在jenkins中使用,jenkins中配置如下