Selenium处理Windows程序(进程)

Selenium WebDriver java 提供了一个专门的WindowsUtils类去和Windows操作系统交互。

就像我们之前说过有时候跑完脚本后,IEDriverServer.exe进程没杀掉,以及处理的方法。但是有一些未知的情况下,还是会有这样的情况。

对测试环境的设置我们可以做一个更好的处理。在Test运行之前和之后,都去关掉相应的进程,这样的话,就算是跑完脚本后,一些相关进程没关闭,再下次运行的时候,也会重新设置运行环境。

以下的方法:

1
2
WindowsUtils.tryToKillByName("IEDriverServer.exe");
WindowsUtils.tryToKillByName("iexplore.exe");

WindowsUtils会去查询指定的进程名称,并kill掉所有运行的相关进程。这儿有一个小问题,如果当前指定进程不存在,就会抛出一个异常,但是也不会影响脚本的运行,Test会继续运行下一个步骤,只是查看的时候会有异常错误信息,感觉有点怪怪的。

解决方法:

我们可以在运行这个方法之前,先去判断进程是否存在,如果存在再执行,反之,就不执行。下面是个小例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
@BeforeMethod(alwaysRun = true)
public static WebDriver openBrowser() throws Exception
{
stopSelenium();
int browserType = GlobalSetting.browserType;
switch (browserType)
{
case 1:
driver = new FirefoxDriver();
log("INFO", "Launch browser: Firefox.");
}
return driver;

}

@AfterMethod(alwaysRun = true)
public static void stopSelenium() {
if (isProcessRunging("IEDriverServer.exe")){
WindowsUtils.tryToKillByName("IEDriverServer.exe");
}
if (isProcessRunging("iexplore.exe")){
WindowsUtils.tryToKillByName("iexplore.exe");
}
}

public static boolean isProcessRunging(String processName) throws Exception {
boolean result = false;
Process p = Runtime.getRuntime().exec("tasklist");
BufferedReader reader = new BufferedReader(new InputStreamReader(
p.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
if (line.contains(processName)) {
result = true;
break;
}
}

return result;
}

这样的话,应该就不会再有上边说的那个异常了。

上边我们加了BeforeMethod和AfterMethod注释,这样我觉得一个好处就是在用例层,我们就不用再每次再专门弄一个setup去做一些设置,只有Test就好了。只是个人的一些拙见,也是在学习中,有任何不对的地方,还请多多指正:)

唐胡璐 wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!
分享创造价值,您的支持将鼓励我继续前行!