diff --git a/src/main/java/ru/sbtqa/tag/pagefactory/Page.java b/src/main/java/ru/sbtqa/tag/pagefactory/Page.java index 00d8a66..f3d7070 100644 --- a/src/main/java/ru/sbtqa/tag/pagefactory/Page.java +++ b/src/main/java/ru/sbtqa/tag/pagefactory/Page.java @@ -1,6 +1,5 @@ package ru.sbtqa.tag.pagefactory; -import static java.lang.String.format; import java.lang.annotation.Annotation; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; diff --git a/src/main/java/ru/sbtqa/tag/pagefactory/PageFactory.java b/src/main/java/ru/sbtqa/tag/pagefactory/PageFactory.java index 7f07fda..f21c23e 100644 --- a/src/main/java/ru/sbtqa/tag/pagefactory/PageFactory.java +++ b/src/main/java/ru/sbtqa/tag/pagefactory/PageFactory.java @@ -28,10 +28,8 @@ public class PageFactory { private static boolean aspectsDisabled = false; private static final String ENVIRONMENT = Props.get("driver.environment"); - private static final String INITIAL_URL = Props.get("driver.url"); private static final String PAGES_PACKAGE = Props.get("page.package"); private static final String TIMEOUT = Props.get("page.load.timeout"); - private static final String BROWSER_NAME = Props.get("browser.name"); private static final String ENVIRONMENT_WEB = "web"; private static final String ENVIRONMENT_MOBILE = "mobile"; @@ -100,13 +98,6 @@ public static Actions getActions() { return actions; } - /** - * @return the browserName - */ - public static String getBrowserName() { - return BROWSER_NAME; - } - /** * @return the pagesPackage */ @@ -167,11 +158,4 @@ public static Environment getEnvironment() { throw new FactoryRuntimeException("Environment '" + ENVIRONMENT + "' is not supported"); } } - - /** - * @return the INITIAL_URL - */ - public static String getInitialUrl() { - return INITIAL_URL; - } } diff --git a/src/main/java/ru/sbtqa/tag/pagefactory/PageWrapper.java b/src/main/java/ru/sbtqa/tag/pagefactory/PageWrapper.java index 41455c9..4179577 100644 --- a/src/main/java/ru/sbtqa/tag/pagefactory/PageWrapper.java +++ b/src/main/java/ru/sbtqa/tag/pagefactory/PageWrapper.java @@ -15,7 +15,6 @@ import ru.sbtqa.tag.pagefactory.annotations.PageEntry; import ru.sbtqa.tag.pagefactory.exceptions.PageInitializationException; import ru.sbtqa.tag.qautils.errors.AutotestError; -import ru.sbtqa.tag.qautils.properties.Props; public class PageWrapper { @@ -142,7 +141,8 @@ public Page changeUrlByTitle(String packageName, String title) throws PageInitia } else { try { URL currentUrl = new URL(PageFactory.getWebDriver().getCurrentUrl()); - String finalUrl = currentUrl.getProtocol() + "://" + currentUrl.getAuthority() + getUrlPrefix() + ((PageEntry) annotation).url(); + String finalUrl = new URL(currentUrl.getProtocol(), currentUrl.getHost(), currentUrl.getPort(), + ((PageEntry) annotation).url()).toString(); PageFactory.getWebDriver().navigate().to(finalUrl); } catch (MalformedURLException ex) { LOG.error("Failed to get current url", ex); @@ -155,20 +155,6 @@ public Page changeUrlByTitle(String packageName, String title) throws PageInitia throw new AutotestError("Page " + title + " doesn't have fast URL in PageEntry"); } - /** - * - * @return - */ - private String getUrlPrefix() { - String prefix = Props.get("webdriver.url.prefix"); - if (!"".equals(prefix)) { - return ((prefix.startsWith("/")) ? "" : "/") - + prefix - + ((prefix.endsWith("/")) ? "" : "/"); - } - return "/"; - } - /** * * @param packageName TODO diff --git a/src/main/java/ru/sbtqa/tag/pagefactory/aspects/ClickAspect.java b/src/main/java/ru/sbtqa/tag/pagefactory/aspects/ClickAspect.java index 5955fc0..83a59cc 100644 --- a/src/main/java/ru/sbtqa/tag/pagefactory/aspects/ClickAspect.java +++ b/src/main/java/ru/sbtqa/tag/pagefactory/aspects/ClickAspect.java @@ -12,6 +12,7 @@ import ru.sbtqa.tag.datajack.Stash; import ru.sbtqa.tag.pagefactory.Page; import ru.sbtqa.tag.pagefactory.PageFactory; +import ru.sbtqa.tag.pagefactory.drivers.TagWebDriver; import ru.sbtqa.tag.pagefactory.extensions.WebExtension; import ru.sbtqa.tag.pagefactory.support.Environment; import ru.sbtqa.tag.qautils.properties.Props; @@ -41,8 +42,8 @@ public void doAroundClick(ProceedingJoinPoint joinPoint) throws Throwable { } String elementHighlightStyle = null; - boolean isVideoHighlightEnable = Boolean.valueOf(Props.get("video.highlight.enable")); - if (isVideoHighlightEnable) { + boolean isVideoHighlightEnabled = Boolean.valueOf(Props.get("video.highlight.enabled")); + if (isVideoHighlightEnabled) { elementHighlightStyle = WebExtension.highlightElementOn(targetWebElement); } @@ -52,7 +53,7 @@ public void doAroundClick(ProceedingJoinPoint joinPoint) throws Throwable { if (!PageFactory.isAspectsDisabled()) { Actions actions = new Actions(PageFactory.getWebDriver()); - if ("IE".equals(PageFactory.getBrowserName())) { + if ("IE".equals(TagWebDriver.getBrowserName())) { Dimension size = PageFactory.getWebDriver().manage().window().getSize(); Point elementLocation = (targetWebElement).getLocation(); Dimension elementSize = (targetWebElement).getSize(); @@ -64,7 +65,7 @@ public void doAroundClick(ProceedingJoinPoint joinPoint) throws Throwable { } } - switch (PageFactory.getBrowserName()) { + switch (TagWebDriver.getBrowserName()) { case "Chrome": case "IE": actions.moveToElement(targetWebElement); @@ -82,7 +83,7 @@ public void doAroundClick(ProceedingJoinPoint joinPoint) throws Throwable { PageFactory.getInstance().getPage(elementRedirect); } - if (isVideoHighlightEnable) { + if (isVideoHighlightEnabled) { WebExtension.highlightElementOff(targetWebElement, elementHighlightStyle); } } diff --git a/src/main/java/ru/sbtqa/tag/pagefactory/drivers/TagMobileDriver.java b/src/main/java/ru/sbtqa/tag/pagefactory/drivers/TagMobileDriver.java index ce847b9..e495a28 100644 --- a/src/main/java/ru/sbtqa/tag/pagefactory/drivers/TagMobileDriver.java +++ b/src/main/java/ru/sbtqa/tag/pagefactory/drivers/TagMobileDriver.java @@ -3,7 +3,6 @@ import io.appium.java_client.AppiumDriver; import io.appium.java_client.android.AndroidDriver; import io.appium.java_client.android.AndroidElement; -import java.io.File; import java.net.MalformedURLException; import java.net.URL; import org.openqa.selenium.remote.DesiredCapabilities; @@ -21,14 +20,20 @@ public class TagMobileDriver { private static final Logger LOG = LoggerFactory.getLogger(TagMobileDriver.class); private static AppiumDriver mobileDriver; - + private static final String APPIUM_URL = Props.get("appium.url"); + private static final String APPIUM_DEVICE_NAME = Props.get("appium.device.name"); + private static final String APPIUM_DEVICE_PLATFORM = Props.get("appium.device.platform"); + private static final String APPIUM_APP_PACKAGE = Props.get("appium.app.package"); + private static final String APPIUM_APP_ACTIVITY = Props.get("appium.app.activity"); + private static final String VIDEO_ENABLED = Props.get("video.enabled", "false"); + public static AppiumDriver getDriver() { if (Environment.MOBILE != PageFactory.getEnvironment()) { throw new FactoryRuntimeException("Failed to get mobile driver while environment is not mobile"); } if (null == mobileDriver) { - if (Boolean.valueOf(Props.get("video.enable"))) { + if (Boolean.valueOf(VIDEO_ENABLED)) { VideoRecorder.getInstance().startRecording(); } @@ -39,10 +44,10 @@ public static AppiumDriver getDriver() { private static void createDriver() { DesiredCapabilities capabilities = new DesiredCapabilities(); - capabilities.setCapability("deviceName", Props.get("appium.device.name")); - capabilities.setCapability("platformVersion", Props.get("appium.device.platform")); - capabilities.setCapability("appPackage", Props.get("appium.app.package")); - capabilities.setCapability("appActivity", Props.get("appium.app.activity")); + capabilities.setCapability("deviceName", APPIUM_DEVICE_NAME); + capabilities.setCapability("platformVersion", APPIUM_DEVICE_PLATFORM); + capabilities.setCapability("appPackage", APPIUM_APP_PACKAGE); + capabilities.setCapability("appActivity", APPIUM_APP_ACTIVITY); capabilities.setCapability("autoGrantPermissions", "true"); capabilities.setCapability("unicodeKeyboard", "true"); capabilities.setCapability("resetKeyboard", "true"); @@ -50,9 +55,9 @@ private static void createDriver() { URL url; try { - url = new URL(PageFactory.getInitialUrl()); + url = new URL(APPIUM_URL); } catch (MalformedURLException e) { - throw new FactoryRuntimeException("Failed to connect to appium on url " + PageFactory.getInitialUrl(), e); + throw new FactoryRuntimeException("Could not parse appium url. Check 'appium.url' property", e); } setAspectsDisabled(true); diff --git a/src/main/java/ru/sbtqa/tag/pagefactory/drivers/TagWebDriver.java b/src/main/java/ru/sbtqa/tag/pagefactory/drivers/TagWebDriver.java index f3ae65a..c2877fa 100644 --- a/src/main/java/ru/sbtqa/tag/pagefactory/drivers/TagWebDriver.java +++ b/src/main/java/ru/sbtqa/tag/pagefactory/drivers/TagWebDriver.java @@ -38,36 +38,43 @@ public class TagWebDriver { - private static final Logger log = LoggerFactory.getLogger(TagWebDriver.class); + private static final Logger LOG = LoggerFactory.getLogger(TagWebDriver.class); private static WebDriver webDriver; - private static final int ATTEMPTS_TO_START_WEBDRIVER = Integer.parseInt(Props.get("driver.create.attempts", "3")); private static BrowserMobProxy proxy; - private static final String WEBDRIVER_PATH = "src/test/resources/webdrivers/"; + private static final int WEBDRIVER_CREATE_ATTEMPTS = Integer.parseInt(Props.get("webdriver.create.attempts", "3")); + private static final String WEBDRIVER_PATH = Props.get("webdriver.drivers.path"); + private static final String WEBDRIVER_URL = Props.get("webdriver.url"); + private static final String WEBDRIVER_STARTING_URL = Props.get("webdriver.starting.url"); + private static final String WEBDRIVER_PROXY_ENABLED = Props.get("webdriver.proxy.enabled", "false"); + private static final String WEBDRIVER_BROWSER_IE_KILLONDISPOSE = Props.get("webdriver.browser.ie.killOnDispose", "false"); + private static final String WEBDRIVER_BROWSER_NAME = Props.get("webdriver.browser.name"); + + private static final String VIDEO_ENABLED = Props.get("video.enabled", "false"); public static org.openqa.selenium.WebDriver getDriver() { - if (Environment.WEB != PageFactory.getEnvironment()) { - throw new FactoryRuntimeException("Failed to get web driver while environment is not web"); - } - + if (Environment.WEB != PageFactory.getEnvironment()) { + throw new FactoryRuntimeException("Failed to get web driver while environment is not web"); + } + if (null == webDriver) { - if (Boolean.valueOf(Props.get("video.enable"))) { + if (Boolean.valueOf(VIDEO_ENABLED)) { VideoRecorder.getInstance().startRecording(); } - for (int i = 1; i <= ATTEMPTS_TO_START_WEBDRIVER; i++) { - log.info("Attempt #" + i + " to start web driver"); + for (int i = 1; i <= WEBDRIVER_CREATE_ATTEMPTS; i++) { + LOG.info("Attempt #" + i + " to start web driver"); try { createDriver(); break; } catch (UnreachableBrowserException e) { - log.warn("Failed to create web driver. Attempt number {}", i, e); + LOG.warn("Failed to create web driver. Attempt number {}", i, e); if (null != webDriver) { // Don't dispose when driver is already null, cuz it causes new driver creation at Init.getWebDriver() dispose(); } } catch (UnsupportedBrowserException e) { - log.error("Failed to create web driver", e); + LOG.error("Failed to create web driver", e); break; } } @@ -78,16 +85,16 @@ public static org.openqa.selenium.WebDriver getDriver() { private static void createDriver() throws UnsupportedBrowserException { DesiredCapabilities capabilities = new DesiredCapabilitiesParser().parse(); - if (Props.get("webdriver.remote.host").isEmpty()) { + if (WEBDRIVER_URL.isEmpty()) { //Local proxy available on local webdriver instances only - if (!Props.get("proxy.enable").isEmpty()) { + if (!WEBDRIVER_PROXY_ENABLED.isEmpty()) { setProxy(new BrowserMobProxyServer()); proxy.start(0); Proxy seleniumProxy = ClientUtil.createSeleniumProxy(proxy); capabilities.setCapability(CapabilityType.PROXY, seleniumProxy); } - switch (PageFactory.getBrowserName()) { + switch (WEBDRIVER_BROWSER_NAME) { case "Firefox": capabilities.setBrowserName("firefox"); setWebDriver(new FirefoxDriver(capabilities)); @@ -97,25 +104,35 @@ private static void createDriver() throws UnsupportedBrowserException { setWebDriver(new SafariDriver(capabilities)); break; case "Chrome": - File chromeDriver = new File(WEBDRIVER_PATH + "chromedriver.exe"); - System.setProperty("webdriver.chrome.driver", chromeDriver.getAbsolutePath()); + if (!WEBDRIVER_PATH.isEmpty()) { + File chromeDriver = new File(WEBDRIVER_PATH + "chromedriver.exe"); + System.setProperty("webdriver.chrome.driver", chromeDriver.getAbsolutePath()); + } else { + LOG.warn("The value of property 'webdriver.drivers.path is not specified." + + " Try to get {} driver from system PATH'", WEBDRIVER_BROWSER_NAME); + } capabilities.setBrowserName("chrome"); setWebDriver(new ChromeDriver(capabilities)); break; case "Opera": throw new UnsupportedOperationException("Opera browser is not supported yet."); case "IE": - File IEdriver = new File(WEBDRIVER_PATH + "IEDriverServer.exe"); - System.setProperty("webdriver.ie.driver", IEdriver.getAbsolutePath()); + if (!WEBDRIVER_PATH.isEmpty()) { + File IEdriver = new File(WEBDRIVER_PATH + "IEDriverServer.exe"); + System.setProperty("webdriver.ie.driver", IEdriver.getAbsolutePath()); + } else { + LOG.warn("The value of property 'webdriver.drivers.path is not specified." + + " Try to get {} driver from system PATH'", WEBDRIVER_BROWSER_NAME); + } capabilities.setBrowserName("internet explorer"); setWebDriver(new InternetExplorerDriver(capabilities)); break; default: - throw new UnsupportedBrowserException("'" + PageFactory.getBrowserName() + "' is not supported yet"); + throw new UnsupportedBrowserException("'" + WEBDRIVER_BROWSER_NAME + "' is not supported yet"); } } else { - switch (PageFactory.getBrowserName()) { + switch (WEBDRIVER_BROWSER_NAME) { case "Firefox": capabilities.setBrowserName("firefox"); break; @@ -123,62 +140,72 @@ private static void createDriver() throws UnsupportedBrowserException { capabilities.setBrowserName("safari"); break; case "Chrome": - File chromeDriver = new File(WEBDRIVER_PATH + "chromedriver.exe"); - System.setProperty("webdriver.chrome.driver", chromeDriver.getAbsolutePath()); + if (!WEBDRIVER_PATH.isEmpty()) { + File chromeDriver = new File(WEBDRIVER_PATH + "chromedriver.exe"); + System.setProperty("webdriver.chrome.driver", chromeDriver.getAbsolutePath()); + } else { + LOG.warn("The value of property 'webdriver.drivers.path is not specified." + + " Try to get {} driver from system PATH'", WEBDRIVER_BROWSER_NAME); + } capabilities.setBrowserName("chrome"); break; case "Opera": throw new UnsupportedOperationException("Opera browser supported as Chrome So change config to chrome."); case "IE": - File IEdriver = new File(WEBDRIVER_PATH + "IEDriverServer.exe"); - System.setProperty("webdriver.ie.driver", IEdriver.getAbsolutePath()); + if (!WEBDRIVER_PATH.isEmpty()) { + File IEdriver = new File(WEBDRIVER_PATH + "IEDriverServer.exe"); + System.setProperty("webdriver.ie.driver", IEdriver.getAbsolutePath()); + } else { + LOG.warn("The value of property 'webdriver.drivers.path is not specified." + + " Try to get {} driver from system PATH'", WEBDRIVER_BROWSER_NAME); + } capabilities.setBrowserName("internet explorer"); break; default: - throw new UnsupportedBrowserException("'" + PageFactory.getBrowserName() + "' is not supported yet"); + throw new UnsupportedBrowserException("'" + WEBDRIVER_BROWSER_NAME + "' is not supported yet"); } try { - URL remoreUrl = new URL("http://" + Props.get("webdriver.remote.host") + ":4444/wd/hub"); - setWebDriver(new RemoteWebDriver(remoreUrl, capabilities)); + URL remoteUrl = new URL(WEBDRIVER_URL); + setWebDriver(new RemoteWebDriver(remoteUrl, capabilities)); } catch (MalformedURLException e) { - log.error("Can not parse remote url. Check webdriver.remote.host property"); + LOG.error("Could not parse remote url. Check 'webdriver.url' property"); } } webDriver.manage().timeouts().pageLoadTimeout(getTimeOutInSeconds(), TimeUnit.SECONDS); webDriver.manage().window().maximize(); - webDriver.get(PageFactory.getInitialUrl()); + webDriver.get(WEBDRIVER_STARTING_URL); } public static void dispose() { try { - log.info("Checking any alert opened"); + LOG.info("Checking any alert opened"); WebDriverWait alertAwaiter = new WebDriverWait(webDriver, 2); alertAwaiter.until(ExpectedConditions.alertIsPresent()); Alert alert = webDriver.switchTo().alert(); - log.info("Got an alert: " + alert.getText() + "\n Closing it."); + LOG.info("Got an alert: " + alert.getText() + "\n Closing it."); alert.dismiss(); } catch (WebDriverException e) { - log.debug("No alert opened. Closing webdriver.", e); + LOG.debug("No alert opened. Closing webdriver.", e); } Set windowHandlesSet = webDriver.getWindowHandles(); - try { - if (windowHandlesSet.size() > 1) { - for (String winHandle : windowHandlesSet) { - webDriver.switchTo().window(winHandle); - ((JavascriptExecutor) webDriver).executeScript( - "var objWin = window.self;" - + "objWin.open('','_self','');" - + "objWin.close();"); - } - } + try { + if (windowHandlesSet.size() > 1) { + for (String winHandle : windowHandlesSet) { + webDriver.switchTo().window(winHandle); + ((JavascriptExecutor) webDriver).executeScript( + "var objWin = window.self;" + + "objWin.open('','_self','');" + + "objWin.close();"); + } + } } catch (Exception e) { - log.warn("Failed to kill all of the iexplore windows", e); + LOG.warn("Failed to kill all of the iexplore windows", e); } try { - if ("IE".equals(PageFactory.getBrowserName()) - && Boolean.parseBoolean(Props.get("browser.ie.killOnDispose", "true"))) { + if ("IE".equals(WEBDRIVER_BROWSER_NAME) + && Boolean.parseBoolean(WEBDRIVER_BROWSER_IE_KILLONDISPOSE)) { // Kill IE by Windows means instead of webdriver.quit() Runtime.getRuntime().exec("taskkill /f /im iexplore.exe").waitFor(); Runtime.getRuntime().exec("taskkill /f /im IEDriverServer.exe").waitFor(); @@ -186,13 +213,13 @@ public static void dispose() { webDriver.quit(); } } catch (WebDriverException | IOException | InterruptedException e) { - log.warn("Failed to quit web driver", e); + LOG.warn("Failed to quit web driver", e); } finally { try { //TODO take out into a separate method // Wait for processes disappear, this might take a few seconds if (SystemUtils.IS_OS_WINDOWS) { - String brwsrNm = PageFactory.getBrowserName().toLowerCase().trim(); + String brwsrNm = WEBDRIVER_BROWSER_NAME.toLowerCase().trim(); if ("ie".equals(brwsrNm)) { brwsrNm = "iexplore"; } @@ -206,7 +233,7 @@ public static void dispose() { } } } catch (IOException | InterruptedException e) { - log.warn("Failed to wait for browser processes finish", e); + LOG.warn("Failed to wait for browser processes finish", e); } } @@ -226,4 +253,11 @@ public static void setWebDriver(WebDriver aWebDriver) { public static void setProxy(BrowserMobProxy aProxy) { proxy = aProxy; } + + /** + * @return the WEBDRIVER_BROWSER_NAME + */ + public static String getBrowserName() { + return WEBDRIVER_BROWSER_NAME; + } } diff --git a/src/main/java/ru/sbtqa/tag/pagefactory/support/DesiredCapabilitiesParser.java b/src/main/java/ru/sbtqa/tag/pagefactory/support/DesiredCapabilitiesParser.java index 330da92..a1b236b 100644 --- a/src/main/java/ru/sbtqa/tag/pagefactory/support/DesiredCapabilitiesParser.java +++ b/src/main/java/ru/sbtqa/tag/pagefactory/support/DesiredCapabilitiesParser.java @@ -10,7 +10,7 @@ import org.openqa.selenium.remote.CapabilityType; import org.openqa.selenium.remote.DesiredCapabilities; import ru.sbtqa.tag.pagefactory.PageFactory; -import static ru.sbtqa.tag.pagefactory.PageFactory.getBrowserName; +import ru.sbtqa.tag.pagefactory.drivers.TagWebDriver; import ru.sbtqa.tag.qautils.properties.Props; public class DesiredCapabilitiesParser { @@ -25,7 +25,7 @@ public DesiredCapabilities parse() { capabilities.setCapability(CapabilityType.UNEXPECTED_ALERT_BEHAVIOUR, UnexpectedAlertBehaviour.IGNORE); - final String capsPrefix = "webdriver." + PageFactory.getBrowserName().toLowerCase() + ".capability."; + final String capsPrefix = "webdriver." + TagWebDriver.getBrowserName().toLowerCase() + ".capability."; Set propKeys = Props.getProps().stringPropertyNames(); List capabilitiesFromProps = new ArrayList<>(); @@ -41,7 +41,7 @@ public DesiredCapabilities parse() { String capability = rawCapabilityKey.substring(capsPrefix.length()); - if (capability.startsWith("options") && "Chrome".equals(getBrowserName())) { + if (capability.startsWith("options") && "Chrome".equals(TagWebDriver.getBrowserName())) { // For Chrome options must be parsed and specified as a data structure. // For non-chrome browsers options could be passed as string String optionsCapability = capability.substring("options.".length()); diff --git a/src/main/resources/config/application.properties-sample b/src/main/resources/config/application.properties-sample new file mode 100644 index 0000000..aba9194 --- /dev/null +++ b/src/main/resources/config/application.properties-sample @@ -0,0 +1,51 @@ +#COMMON BLOCK +#mobile or web +driver.environment = mobile + +#path to page objects +page.package = ru.sbtqa.tag.mobilefactory.entries + +#default wait timeout in milliseconds +page.load.timeout = 60000 + +#optional. false by default +video.enabled = false +video.path.dest = /tmp/video +video.path.temp = /tmp/video +video.highlight.enabled = false + +#optional. driver or raw. Raw by default +screenshot.strategy = driver + +#optional. tasks to kill before test (ONLY FOR WINDOWS) +tasks.to.kill = iexplorer,chrome + + +#IN CASE OF MOBILE +#parameters for mobile driver create +appium.url = http://127.0.0.1:4723/wd/hub +appium.device.name = Android Emulator +appium.device.platform = 6.0 +appium.app.package = com.android.settings +appium.app.activity = .Settings + + +#IN CASE OF WEB +#parameters for web driver create +webdriver.browser.name = Chrome +webdriver.starter.url = http://google.com + +#optional. The number of start attempts webdriver. 3 by default +webdriver.create.attempts = 3 + +#optional. False by default +webdriver.proxy.enabled = false + +#optional. If path is not specified webdrivers will be searched in system PATH +webdriver.drivers.path = src/test/resources/webdrivers/ + +#optional. In case of using remote WebDriver +webdriver.url = http://127.0.0.1:4444/wd/hub + +#optional. kill ie browser process after test (ONLY FOR WINDOWS) +webdriver.browser.ie.killOnDispose = true