- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我调用网络驱动程序的代码。
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/
可以说我只是使用 pygame 有一个正常的游戏循环。 run = True while run: for event in pygame.event.get(): if ev
如何让控制台应用程序运行直到用户输入“Q”、“q”、“Quit”或“quit”来终止它? 这是我当前的代码: public class Class1 { [STAThread] static
我正在创建一个基于 promise 的 API。如果我一次发出一个请求,一切都会正常,但是,如果 2 个或更多请求在一秒内到达服务器,我会收到以下错误 Error: Cannot enqueue Qu
考虑: (gdb) q A debugging session is active. Inferior 1 [process 9018] will be killed. Quit an
我有以下设置: int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); // Create the DBM
我的停靠菜单总是自动添加“退出”和其他 2 个菜单项,我如何阻止/修改它们? 更新: 确实没有办法删除/阻止/重定向“退出”菜单项。最后像打击一样使用了彼得的推荐希望对其他人有帮助 -(NSAppli
这是我的代码:1. 用户输入两个名称,中间有一个空格。这意味着需要读取两个字符串。 IE。输入: 约翰·多伊。 然后在字符数组中检查字符串。 (工作正常)。 while 循环一直持续到用户输入“sto
刚刚弄乱了 pygame 并遇到了这个错误。 代码: import sys import pygame pygame.init() size = width, height = 600, 400 sc
看完Eric Lippert’s answer我的印象是 await和 call/cc几乎是同一枚硬币的两面,最多只是句法上的差异。然而,在尝试实际实现时 call/cc在 C# 5 中,我遇到了一个
Memcached quit 命令用户关闭一个客户端连接 语法 quit 范例 连接到127.0.0.1 上 11211 的 Memcached 服务, 然后退出 $ telnet 12
这只是一种方便,但我认为很有用。请注意,IPython 和 Matlab 一样允许纯退出。因此,在 Julia 中允许混叠是合理的。 感谢您提供有关如何执行此操作的任何想法。 最佳答案 退出 Juli
我正在运行Django服务,该服务将启动chromedriver用于 Selenium ,并爬取网站以获取数据。 另一个Java服务通过HTTP调用Django服务。 这是代码: views.py p
Iam在我的游戏中一起使用Adcolony和Vungle时,一切正常,但是当用Application.Quit()游戏退出游戏时,关闭了游戏,但弹出了文本“不幸的应用程序崩溃”的弹出窗口。 在这里我附
我最近做了一个小游戏,然后用pyinstaller把它变成了一个应用程序。运行时,有两种关闭方式。它是全屏的,因此不包括单击红色 x 按钮,但基本上我有这个 if keys[pygame.K_ESCA
我正在练习使用递归,但有些东西我不太明白。例如,我写了这个简单的倒计时函数,它应该等到一秒过去,然后倒计时到下一秒。 我首先是这样写的: function countdown(sec) { con
我正在使用 Appium 安装应用程序。安装后,应用程序应该在后台运行。另一项测试应使用 Chrome 在应用程序在后台运行时检查互联网连接。问题是 driver.quit() 甚至启动 Androi
我有一个正在运行测试的框架;任何错误都会导致 WebDriver 实例调用类似 handleException 方法的方法,我在其中调用 driver.quit() 方法。我觉得 driver.qui
我知道所有基本的处理程序,即 on run、on open 和 onreopen。但是这个处理程序,on quit,让我很困惑。我的问题是,它的用途是什么以及它是如何触发的? 最佳答案 on quit
我有两个 for 循环: for event in pygame.event.get(): if event.type == QUIT:
我目前正在编写一个小的 GUI 程序,它可以完成一些工作并在之后退出。工作完成后,GUI 线程会更新用户的信息。 这是我目前使用的模式,我认为它不是最优雅的模式: static void MainFo
我是一名优秀的程序员,十分优秀!