Skip to content

Commit 784e914

Browse files
author
Mat Walker
committed
Added tests and ability to close existing WebDriver instances - not ready for release yet
1 parent 26f1c77 commit 784e914

File tree

1 file changed

+87
-22
lines changed

1 file changed

+87
-22
lines changed

src/main/java/TeamControlium/Controlium/SeleniumDriver.java

Lines changed: 87 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import TeamControlium.Utilities.TestData;
66
import org.apache.commons.io.FilenameUtils;
77
import org.apache.commons.lang3.time.StopWatch;
8+
import org.junit.jupiter.api.Assertions;
89
import org.openqa.selenium.By;
910
import org.openqa.selenium.JavascriptExecutor;
1011
import org.openqa.selenium.WebDriver;
@@ -21,7 +22,9 @@
2122
import org.openqa.selenium.ie.InternetExplorerOptions;
2223

2324
import javax.swing.text.Utilities;
25+
import java.io.BufferedReader;
2426
import java.io.File;
27+
import java.io.InputStreamReader;
2528
import java.nio.file.Files;
2629
import java.nio.file.Path;
2730
import java.nio.file.Paths;
@@ -63,33 +66,31 @@ public class SeleniumDriver {
6366
private String seleniumLogFilename=null;
6467

6568
public SeleniumDriver(String seleniumHost,String device,String browser) {
66-
commonConstructs();
67-
Browsers.SetTestBrowser(browser);
68-
Devices.SetTestDevice(device);
69-
setSeleniumHost(seleniumHost);
69+
commonConstructs(false,seleniumHost,device,browser);
7070
}
7171
public SeleniumDriver(String seleniumHost) {
72-
commonConstructs();
73-
Browsers.SetTestBrowser();
74-
Devices.SetTestDevice();
75-
setSeleniumHost(null);
72+
commonConstructs(false,seleniumHost,null,null);
7673
}
7774
public SeleniumDriver(String device,String browser) {
78-
commonConstructs();
79-
Browsers.SetTestBrowser(browser);
80-
Devices.SetTestDevice(device);
81-
setSeleniumHost(seleniumHost);
82-
startOrConnectToSeleniumServer();
75+
commonConstructs(false,null,device,browser);
8376
}
8477
public SeleniumDriver() {
85-
commonConstructs();
86-
Browsers.SetTestBrowser();
87-
Devices.SetTestDevice();
88-
setSeleniumHost(null);
89-
startOrConnectToSeleniumServer();
78+
commonConstructs(false,null,null,null);
79+
}
80+
public SeleniumDriver(boolean killDriverInstancesFirst,String seleniumHost,String device,String browser) {
81+
commonConstructs(killDriverInstancesFirst,seleniumHost,device,browser);
82+
}
83+
public SeleniumDriver(boolean killDriverInstancesFirst,String seleniumHost) {
84+
commonConstructs(killDriverInstancesFirst,seleniumHost,null,null);
85+
}
86+
public SeleniumDriver(boolean killDriverInstancesFirst,String device,String browser) {
87+
commonConstructs(killDriverInstancesFirst,null,device,browser);
88+
}
89+
public SeleniumDriver(boolean killDriverInstancesFirst) {
90+
commonConstructs(killDriverInstancesFirst,null,null,null);
9091
}
9192

92-
private void commonConstructs() {
93+
private void commonConstructs(boolean killFirst, String seleniumHost,String device,String browser) {
9394
// Initialise defaults
9495
setFindTimeout(Duration.ofMillis(defaultTimeout));
9596
setPollInterval(Duration.ofMillis(defaultPollInterval));
@@ -122,6 +123,13 @@ private void commonConstructs() {
122123
seleniumLogFilename=null;
123124
}
124125
Logger.WriteLine(Logger.LogLevels.TestInformation, "Selenium Log filename: [%s]",seleniumLogFilename==null?"stdio (console)":seleniumLogFilename);
126+
127+
Browsers.SetTestBrowser(browser);
128+
Devices.SetTestDevice(device);
129+
130+
setSeleniumHost(seleniumHost);
131+
132+
startOrConnectToSeleniumServer(killFirst);
125133
}
126134

127135

@@ -367,9 +375,9 @@ public void executeJavaScriptNoReturnData(String script, Object[] args)
367375
}
368376

369377

370-
private void startOrConnectToSeleniumServer() {
378+
private void startOrConnectToSeleniumServer(boolean killFirst) {
371379
if (isLocalSelenium) {
372-
setupLocalRun();
380+
setupLocalRun(killFirst);
373381
} else {
374382
throw new RuntimeException("Remote server execution mot yet implemented!");
375383
}
@@ -395,7 +403,7 @@ private void setSeleniumHost(String host) {
395403
isLocalSelenium = (seleniumHost.equalsIgnoreCase("localhost") || seleniumHost.equals("127.0.0.1"));
396404
}
397405

398-
private void setupLocalRun() {
406+
private void setupLocalRun(boolean killFirst) {
399407
Logger.WriteLine(Logger.LogLevels.FrameworkDebug, "Running Selenium locally");
400408

401409
try {
@@ -441,6 +449,7 @@ else if (Browsers.isChrome()) {
441449
Logger.WriteLine(Logger.LogLevels.FrameworkInformation, "Writing Selenium Server Output to console");
442450
}
443451

452+
if (killFirst) killAllProcesses(executable);
444453
webDriver = new ChromeDriver(ChromeDriverService.createDefaultService(), options);
445454
}
446455
else if (Browsers.isEdge()) {
@@ -573,6 +582,62 @@ private String durationFormatted(long millis) {
573582
return String.format("%02d:%02d:%02d.%03d",hours,minutes,seconds,milliseconds);
574583
}
575584

585+
private void killAllProcesses(String name) {
586+
int matchingProcessCount = getProcessCount(name);
587+
int newProcessCount=0;
588+
String line;
589+
while (matchingProcessCount>0) {
590+
try {
591+
if (matchingProcessCount >= 0) {
592+
Process p = Runtime.getRuntime().exec(System.getenv("windir") + String.format("\\system32\\" + "taskkill.exe /F /IM %s", name));
593+
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
594+
while ((line = input.readLine()) != null) {
595+
int g = 99;
596+
}
597+
input.close();
598+
}
599+
} catch (Exception err) {
600+
Assertions.fail(String.format("Error killing [%s] processes ", name), err);
601+
}
602+
newProcessCount = getProcessCount(name);
603+
if (newProcessCount == matchingProcessCount) {
604+
Assertions.fail(String.format("Error killing [%s] processes. Did not kill processes! ", name));
605+
}
606+
matchingProcessCount=newProcessCount;
607+
}
608+
}
609+
610+
611+
private int getProcessCount(String name) {
612+
int count=0;
613+
List<String[]> processInstanceCount = getProcessList();
614+
615+
for(String[] line : getProcessList()) {
616+
if (line[0].equalsIgnoreCase(name)) count++;
617+
}
618+
return count;
619+
}
620+
621+
private List<String[]> getProcessList() {
622+
boolean startLogging = false;
623+
// MAT GET THIS WORKING - Driver executable filesnames.........
624+
625+
List<String[]> list = new ArrayList<String[]>();
626+
try {
627+
String line;
628+
//Process p = Runtime.getRuntime().exec("ps -e");
629+
Process p = Runtime.getRuntime().exec (System.getenv("windir") +"\\system32\\"+"tasklist.exe");
630+
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
631+
while ((line = input.readLine()) != null) {
632+
String[] arrayLine = line.split("\\s+");
633+
if (startLogging) list.add(arrayLine);
634+
if (line.contains("=======")) startLogging=true;
635+
}
636+
input.close();
637+
} catch (Exception err) {Assertions.fail("Error getting process list: ",err);
638+
}
639+
return list;
640+
}
576641

577642
}
578643

0 commit comments

Comments
 (0)