- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我已经进行了一些搜索,但仍然遇到同样的问题。我相信这可能是由于我的 webdriver 是静态的?我不太确定...
在我的主类中,我包含了@BeforeTest
和@AfterTest
。@BeforeTest
包括根据我的 XML 文件启动新的浏览器@AfterTest
包含 driver.quit()
,它应该终止 session /驱动程序,以便第二个测试可以从 @BeforeTest
获得干净的驱动程序,没有?
这是我的浏览器声明:
public class Browser {
public static WebDriver driver;
//Variable initialization
public static String title;
public static String url;
public static String currentBrowser;
public static boolean jseWorkAround;
public Browser(){
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
}
//Browser launch
public static void launch(String browser){
if(browser.equalsIgnoreCase("firefox")){
driver = new FirefoxDriver();
currentBrowser = "Firefox/";
jseWorkAround = false;
System.out.println("Firefox Selected");
} else if (browser.equalsIgnoreCase("chrome")){
driver = new ChromeDriver();
currentBrowser = "Chrome/";
jseWorkAround = false;
System.out.println("Chrome Selected");
} else if (browser.equalsIgnoreCase("edge")){
driver = new EdgeDriver();
currentBrowser = "Edge/";
jseWorkAround = true;
System.out.println("Edge selected");
} else if (browser.equalsIgnoreCase("ie")){
driver = new InternetExplorerDriver();
currentBrowser = "IE/";
jseWorkAround = true;
System.out.println("IE Driver Selected");
} else if (browser.equalsIgnoreCase("background")){
driver = new PhantomJSDriver();
currentBrowser = "Background/";
jseWorkAround = false;
System.out.println("Background selected");
} else {
throw new IllegalArgumentException("Invalid Browser");
}
}
public static void quit(){
driver.quit();
}
public static void goToPage(String pageurl){
driver.get(pageurl);
}
这是一个随机样本测试:
@Parameters({"browser"})
@BeforeTest
public void browserSelection(String browser){
Browser.launch(browser);
}
@AfterTest
public void cleanupAfterTest(){
Print.line("Test complete. Cleaning up...");
Browser.quit();
}
@Test
public void Test1() {
Browser.goToPage("http://www.google.com");
Screenshot.page("Goes to google");
}
@Test
public void Test2() {
Browser.goToPage("http://www.yahoo.com");
Screenshot.page("Goes to yahoo");
}
我注意到当事情开始失败并出现错误“调用退出后调用 webdriver”时,它总是第二次测试结束。浏览器之间的测试根据我的 testng.xml
文件中提到的顺序按顺序进行。如果我先运行 firefox,然后运行 chrome,chrome 测试将在最后一个 @Test
上失败。然而,如果我先运行 chrome,然后运行 firefox,则 firefox 将在最后一个 @Test
上失败。
下面是错误信息...
org.openqa.selenium.NoSuchSessionException: Session ID is null. Using WebDriver after calling quit()?
Build info: version: 'unknown', revision: '1969d75', time: '2016-10-18 09:43:45 -0700'
System info: host: 'DESKTOP-5ED0H7O', ip: '10.0.9.239', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_121'
Driver info: driver.version: RemoteWebDriver
at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:130)
at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:82)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:601)
at org.openqa.selenium.remote.RemoteWebDriver.executeScript(RemoteWebDriver.java:537)
at utility.Scroll.toText(Scroll.java:43)
at tests.TestCases.TCID20(TestCases.java:390)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:108)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:661)
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:869)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1193)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:126)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)
at org.testng.TestRunner.privateRun(TestRunner.java:744)
at org.testng.TestRunner.run(TestRunner.java:602)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:380)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:375)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:340)
at org.testng.SuiteRunner.run(SuiteRunner.java:289)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1301)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1226)
at org.testng.TestNG.runSuites(TestNG.java:1144)
at org.testng.TestNG.run(TestNG.java:1115)
at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:132)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:230)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:76)
这种随机失败严重损害了我的进步。如果我在我的 XML 文件上一次只启用一个浏览器而没有其他浏览器在线,则不会失败。
最佳答案
据我所知,您的问题是@test 在加载浏览器之前运行(您必须增加等待时间)。另一件事是您没有添加任何优先级。首先,您获取浏览器的方式。你必须使用 geckodriver、chromedriver 等。
尝试像下面这样获取浏览器
if (browser.equalsIgnoreCase("chrome")){
System.setProperty("webdriver.chrome.driver", "/Path/ToChromeDriver/chromedriver.exe");
driver = new ChromeDriver();
System.out.println("Chrome Selected");
}
像下面这样添加优先级
Browser browser;
@Parameters({"browser"})
@BeforeTest
public void browserSelection(String browser){
browser.launch(browser);
thread.sleep(5000);//Not recommended but timeout also may be an issue if so increase implicitly wait time
}
@AfterTest
public void cleanupAfterTest(){
Print.line("Test complete. Cleaning up...");
browser.quit();
}
@Test( priority = 1, description = "Test 1")
public void setUserName(){
Browser.goToPage("http://www.google.com");
Screenshot.page("Goes to google");
}
@Test(priority = 2,description = "Test 2")
public void setPassword(){
Browser.goToPage("http://www.yahoo.com");
Screenshot.page("Goes to yahoo");
}
关于java - org.openqa.selenium.NoSuchSessionException : Session ID is null. 在调用 quit() 后使用 WebDriver?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42823201/
可以说我只是使用 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
我是一名优秀的程序员,十分优秀!