gpt4 book ai didi

google-chrome - session ID 为空。调用 quit() 后使用 Web 驱动程序?代码在chrome、ie11和edge浏览器中正确执行,但在firefox 55.0.3中不正确

转载 作者:行者123 更新时间:2023-12-02 20:40:31 34 4
gpt4 key购买 nike

这是我调用网络驱动程序的代码。

public class WebDriverUtils {

private static final String karyahost = EnvironmentUtils.getProperty("karya.host", "");
private static final String karyaport = EnvironmentUtils.getProperty("karya.port", "");
private static final long timeOut = 15;
public static RemoteWebDriver webDriver = null;
private static WebDriverWait wait = null;

/**
* Close the browser
*/
public static void closeBrowser() throws Exception{
if (webDriver == null) {
return;
}
webDriver.close();
Thread.sleep(4000);
webDriver.quit();
webDriver = null;
}

/***
* Wait for web element
* @param element - element to be search
*/
public static void waitForElement(By element) {
wait.until(ExpectedConditions.visibilityOfElementLocated(element));
}


/***
* Go to the URL
* @param url - url
* @throws Exception
*/
public static void gotoUrl(String url) throws Exception {
openBrowser();

webDriver.navigate().to(getUrl(url));
}


/**
* Launch the browser
* @return
* @throws Exception
*/
public static RemoteWebDriver openBrowser() throws Exception {
if (webDriver != null) {
return webDriver;
}
String browserType = EnvironmentUtils.getProperty("suite.browser.type", "FIREFOX");
if (browserType.equalsIgnoreCase("CHROME")) {
System.setProperty("webdriver.chrome.driver", FileUtils.getFile("driver/chromeDriver.exe")
.getAbsolutePath());
webDriver = new ChromeDriver();
} else {
if (browserType.equalsIgnoreCase("FIREFOX")) {
Runtime.getRuntime().exec("taskkill /F /IM geckodriver.exe");
System.setProperty("webdriver.gecko.driver", FileUtils.getFile("driver/geckodriver.exe")
.getAbsolutePath());
webDriver = new FirefoxDriver();
maximizeBrowser();

} else {
if (browserType.equalsIgnoreCase("IE")) {
System.setProperty("webdriver.ie.driver", FileUtils.getFile("driver/IEDriverServer.exe")
.getAbsolutePath());
webDriver = new InternetExplorerDriver();
} else {
if (browserType.equalsIgnoreCase("Edge")) {
System.setProperty("webdriver.edge.driver", FileUtils.getFile("driver/MicrosoftWebDriver.exe")
.getAbsolutePath());
webDriver = new EdgeDriver();
}
}
}
}

if (webDriver == null) {
throw new Exception("Invalid browser type: " + browserType);
}
setWait(10);
maximizeBrowser();
wait = new WebDriverWait(webDriver, timeOut);
return webDriver;
}

在 Firefox 中,第一个测试用例运行良好,但是当我在给出 webDriver.quit() 和 webDriver = null 后运行第二个测试用例时,以便我可以通过关闭和打开浏览器来依次运行测试用例,但我收到以下错误消息。

org.openqa.selenium.NoSuchSessionException: Session ID is null. Using WebDriver after calling quit()?
Build info: version: '3.5.3', revision: 'a88d25fe6b', time: '2017-08-29T12:42:44.417Z'
System info: host: 'KARYA-45154KR', ip: '192.168.159.1', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_91'
Driver info: driver.version: SuiteDriver
at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:131)
at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:82)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:646)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:703)
at org.openqa.selenium.remote.RemoteWebDriver.close(RemoteWebDriver.java:532)
at com.karya.utils.WebDriverUtils.closeBrowser(WebDriverUtils.java:40)
at com.karya.test.suite.SuiteDriver.cleanUp(SuiteDriver.java:37)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:525)
at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:202)
at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:130)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:308)
at org.testng.SuiteRunner.run(SuiteRunner.java:240)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1158)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1083)
at org.testng.TestNG.run(TestNG.java:999)
at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:72)
at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:123)

它可以在 chrome 61.0.3163.79 版本、IE 11 和 Edge 浏览器上正常运行。

最佳答案

你的问题是你的 closeBrowser 方法。

webDriver.close();
Thread.sleep(4000);
webDriver.quit();

每个驱动程序的工作都有细微的差别。当你有 chrome 驱动程序时。您可以多次调用 webdriver 对象的 quit

webDriver.quit();
webDriver.quit();
webDriver.quit();

这是因为 chromedriver 会忽略这些。当您执行 close 方法时,它会关闭当前窗口。如果没有剩余窗口,浏览器也会退出。在其他情况下退出将始终关闭所有窗口并退出驱动程序。

对于 Firefox,首先关闭,关闭当前窗口并退出驱动程序。下次发送退出时,它没有 session ID 来退出驱动程序。这就是为什么您收到错误 Session ID is null. Using WebDriver after calling quit() 。所以基本规则,close is equivalent to quit if only 1 window is open

所以你将代码替换为

public static void closeBrowser() throws Exception{
if (webDriver == null) {
return;
}
webDriver.quit();
webDriver = null;
}

一切都应该有效

关于google-chrome - session ID 为空。调用 quit() 后使用 Web 驱动程序?代码在chrome、ie11和edge浏览器中正确执行,但在firefox 55.0.3中不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46170267/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com