Selenium webdriver 无法在 IE 中启动应用程序,但在 Firefox 和 chrome 中打开
Selenium webdriver Not able to launch application in IE, but opens in Firefox and chrome
我正在尝试根据用户的选择在浏览器中启动网络应用程序。为此,我使用了 IF 条件/开关盒。在这两种情况下,应用程序都不会在 IE11 中启动。然而,相同的应用程序在 Firefox & Chrome 中打开正常。
如果我不使用 For 循环或 Switch case,将浏览器名称硬编码为 IE,则应用程序将在 IE11 浏览器中启动并继续测试,没有任何问题。以下代码可能有什么问题
//Attempt 1. Below code NOT WORKING
log.info("browser name received in utils is :" + browser);
switch(browser.toLowerCase())
{
case "firefox":
log.info("browser name before case firefox :" + browser);
try
{
log.info("Launching Firefox browser");
System.setProperty("webdriver.gecko.driver",".\drivers\geckodriver.exe");
d = new FirefoxDriver();
d.manage().timeouts().implicitlyWait(50,TimeUnit.SECONDS) ;
}
catch (Exception e)
{
log.info("Not able to launch browser");
}
log.info("browser name after case firefox :" + browser);
case "iexplorer":
log.info("browser name before case IE :" + browser);
try
{
log.info("Launching IE browser");
System.setProperty("webdriver.ie.driver", ".\drivers\IEDriverServer.exe");
DesiredCapabilities capabilities = DesiredCapabilities.internetExplorer();
capabilities.setCapability(InternetExplorerDriver.IE_ENSURE_CLEAN_SESSION, true);
WebDriver d = new InternetExplorerDriver();
}catch (Exception e)
{
log.info("Not able to launch IE browser");
}
log.info("browser name after case IE :" + browser);
case "chrome":
log.info("browser name before case chrome :" + browser);
try
{
log.info("Launching Chrome browser");
System.setProperty("webdriver.chrome.driver", ".\drivers\chromedriver.exe");
d = new ChromeDriver();
d.manage().timeouts().implicitlyWait(50,TimeUnit.SECONDS) ;
}catch (Exception e)
{
log.info("Not able to chrome browser");
}
log.info("browser name after case chrome :" + browser);
}
------------尝试 1 的日志输出------------
2018-05-02 19:02:27 INFO Utils:75 - browser name received in utils is :iexplorer
2018-05-02 19:02:27 INFO Utils:96 - browser name before case IE :iexplorer
2018-05-02 19:02:27 INFO Utils:99 - Launching IE browser
Started InternetExplorerDriver server (32-bit)
2.53.1.0
Listening on port 45158
Only local connections are allowed
May 02, 2018 7:02:29 PM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: OSS
2018-05-02 19:02:29 INFO Utils:109 - browser name after case IE :iexplorer
2018-05-02 19:02:29 INFO Utils:112 - browser name before case chrome :iexplorer
2018-05-02 19:02:29 INFO Utils:115 - Launching Chrome browser
Starting ChromeDriver 2.36.540470 (e522d04694c7ebea4ba8821272dbef4f9b818c91) on port 9315
Only local connections are allowed.
May 02, 2018 7:02:31 PM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: OSS
2018-05-02 19:02:31 INFO Utils:124 - browser name after case chrome :iexplorer
好的,您的日志输入显示浏览器已启动。如果它关闭或者您没有访问权限,则问题可能出在您创建 IEDriver 时的驱动程序变量中:
// Change from
WebDriver d = new InternetExplorerDriver();
// to:
d = new InternetExplorerDriver();
假设您的 var d
是全局变量,它将解决您的问题。由于您正在创建一个具有相同名称的新对象,因此在方法结束时它会丢失其引用。
我正在尝试根据用户的选择在浏览器中启动网络应用程序。为此,我使用了 IF 条件/开关盒。在这两种情况下,应用程序都不会在 IE11 中启动。然而,相同的应用程序在 Firefox & Chrome 中打开正常。
如果我不使用 For 循环或 Switch case,将浏览器名称硬编码为 IE,则应用程序将在 IE11 浏览器中启动并继续测试,没有任何问题。以下代码可能有什么问题
//Attempt 1. Below code NOT WORKING
log.info("browser name received in utils is :" + browser);
switch(browser.toLowerCase())
{
case "firefox":
log.info("browser name before case firefox :" + browser);
try
{
log.info("Launching Firefox browser");
System.setProperty("webdriver.gecko.driver",".\drivers\geckodriver.exe");
d = new FirefoxDriver();
d.manage().timeouts().implicitlyWait(50,TimeUnit.SECONDS) ;
}
catch (Exception e)
{
log.info("Not able to launch browser");
}
log.info("browser name after case firefox :" + browser);
case "iexplorer":
log.info("browser name before case IE :" + browser);
try
{
log.info("Launching IE browser");
System.setProperty("webdriver.ie.driver", ".\drivers\IEDriverServer.exe");
DesiredCapabilities capabilities = DesiredCapabilities.internetExplorer();
capabilities.setCapability(InternetExplorerDriver.IE_ENSURE_CLEAN_SESSION, true);
WebDriver d = new InternetExplorerDriver();
}catch (Exception e)
{
log.info("Not able to launch IE browser");
}
log.info("browser name after case IE :" + browser);
case "chrome":
log.info("browser name before case chrome :" + browser);
try
{
log.info("Launching Chrome browser");
System.setProperty("webdriver.chrome.driver", ".\drivers\chromedriver.exe");
d = new ChromeDriver();
d.manage().timeouts().implicitlyWait(50,TimeUnit.SECONDS) ;
}catch (Exception e)
{
log.info("Not able to chrome browser");
}
log.info("browser name after case chrome :" + browser);
}
------------尝试 1 的日志输出------------
2018-05-02 19:02:27 INFO Utils:75 - browser name received in utils is :iexplorer 2018-05-02 19:02:27 INFO Utils:96 - browser name before case IE :iexplorer 2018-05-02 19:02:27 INFO Utils:99 - Launching IE browser Started InternetExplorerDriver server (32-bit) 2.53.1.0 Listening on port 45158 Only local connections are allowed May 02, 2018 7:02:29 PM org.openqa.selenium.remote.ProtocolHandshake createSession INFO: Detected dialect: OSS 2018-05-02 19:02:29 INFO Utils:109 - browser name after case IE :iexplorer 2018-05-02 19:02:29 INFO Utils:112 - browser name before case chrome :iexplorer 2018-05-02 19:02:29 INFO Utils:115 - Launching Chrome browser Starting ChromeDriver 2.36.540470 (e522d04694c7ebea4ba8821272dbef4f9b818c91) on port 9315 Only local connections are allowed. May 02, 2018 7:02:31 PM org.openqa.selenium.remote.ProtocolHandshake createSession INFO: Detected dialect: OSS 2018-05-02 19:02:31 INFO Utils:124 - browser name after case chrome :iexplorer
好的,您的日志输入显示浏览器已启动。如果它关闭或者您没有访问权限,则问题可能出在您创建 IEDriver 时的驱动程序变量中:
// Change from
WebDriver d = new InternetExplorerDriver();
// to:
d = new InternetExplorerDriver();
假设您的 var d
是全局变量,它将解决您的问题。由于您正在创建一个具有相同名称的新对象,因此在方法结束时它会丢失其引用。