5

我已经做了一些搜索,但仍然会遇到同样的问题。我相信这可能是因为我的网络驱动程序是静态的?我不太确定。。。

在我的主要课程中,我包括@测试前@测试后@测试前包括根据我的XML文件启动新浏览器@测试后包括driver.quit(),这将终止会话/驱动程序,以便第二个测试可以从中获得干净的驱动程序@测试前没有?

这是我的浏览器声明:

公共类浏览器{公共静态WebDriver驱动程序;//变量初始化公共静态字符串标题;公共静态字符串url;公共静态字符串currentBrowser;public static boolean jseWorkAround;公共浏览器(){driver.manage().timeouts().隐式等待(5,TimeUnit.SECONDS);}//浏览器启动公共静态无效启动(字符串浏览器){if(browser.equalsIgnoreCase(“firefox”)){driver=新FirefoxDriver();currentBrowser=“Firefox/”;jseWorkAround=false;System.out.println(“已选择Firefox”);}else if(browser.equalsIgnoreCase(“chrome”)){driver=新ChromeDriver();currentBrowser=“Chrome/”;jseWorkAround=false;System.out.println(“Chrome Selected”);}else if(browser.equalsIgnoreCase(“边缘”)){driver=新的EdgeDriver();currentBrowser=“边缘/”;jseWorkAround=true;System.out.println(“Edge selected”);}else if(browser.equalsIgnoreCase(“ie”)){driver=新的InternetExplorerDriver();currentBrowser=“IE/”;jseWorkAround=true;System.out.println(“已选择IE驱动程序”);}else if(browser.equalsIgnoreCase(“background”)){driver=新PhantomJSDriver();currentBrowser=“Background/”;jseWorkAround=false;System.out.println(“选择背景”);}其他{抛出新的IllegalArgumentException(“无效浏览器”);}}公共静态void quit(){driver.quit();}public static void goToPage(String pageurl){driver.get(pageurl);}

下面是一个随机抽样测试:

@参数({“浏览器”})@测试前公共void浏览器选择(字符串浏览器){Browser.launch(浏览器);}@测试后公共void cleanupAfterTest(){Print.line(“测试完成。正在清理…”);Browser.quit();}@测试公共无效测试1(){浏览器.goToPage(“http://www.google.com网站");Screenshot.page(“转到谷歌”);}@测试公共void Test2(){浏览器.goToPage(“http://www.yahoo.com网站");Screenshot.page(“转到雅虎”);}

我注意到,当出现错误“Calling webdriver after call quit”时,第二次测试总是会结束。浏览器之间的测试根据我的测试.xml文件。如果我先运行firefox,然后运行chrome,chrome测试将在最后一次失败@测试然而,如果我先运行chrome,然后再运行firefox,那么firefox在最后一个会失败@测试

以下是错误消息。。。

org.openqa.selenium网站。NoSuchSessionException:会话ID为空。调用quit()后使用WebDriver?内部版本信息:版本:“未知”,版本:“1969d75”,时间:“2016-10-18 09:43:45-0700”系统信息:主机:“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.version:RemoteWebDriver在org.openqa.selenium.remote上。HttpCommandExecutor.execute(HttpCommand执行器.java:130)在org.openqa.selenium.remote.service上。DriverCommandExecutor.execute(DriverCommand执行器.java:82)在org.openqa.selenium.remote上。RemoteWebDriver.exexecute(RemoteWebDriver.java:601)在org.openqa.selenium.remote上。RemoteWebDriver.executeScript(RemoteWebDriver.java:537)在实用程序中。滚动到文本(Scroll.java:43)在测试中。测试用例。TCID20(TestCases.java:390)在sun.reflect。NativeMethodAccessorImpl.invoke0(本机方法)在sun.reflect。NativeMethodAccessorImpl.invoke(未知源)在sun.reflect。委托MethodAccessorImpl.invoke(未知源)位于java.lang.reflect。方法.invoke(未知源)在org.testng.internal上。MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:108)在org.testng.internal上。Invoker.invokeMethod(Invoker.java:661)在org.testng.internal上。Invoker.invokeTestMethod(Invoker.java:869)在org.testng.internal上。Invoker.invokeTestMethods(Invoker.java:1193)在org.testng.internal上。测试方法工作者.invokeTestMethods(TestMethodWorker.java:126)在org.testng.internal上。TestMethodWorker.run(TestMethod Worker.java:109)在组织测试。TestRunner.privateRun(TestRunner.java:744)在org.testng。TestRunner.run(TestRunner.java:602)在org.testng。SuiteRunner.runTest(SuiteRunner.java:380)在org.testng。SuiteRunner.runSequentially(SuiteRunner.java:375)在org.testng。SuiteRunner.privateRun(SuiteRunner.java:340)在组织测试。SuiteRunner.run(SuiteRunner.java:289)在org.testng。SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)在org.testng。SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)在org.testng。TestNG.runSuitesSequentialy(TestNG.java:1301)在org.testng。本地测试NG.runSuites(TestNG.java:1226)在org.testng。TestNG.runSuites(TestNG.java:1144)在org.testng。运行(TestNG.java:1115)在org.testng.remote。运行(AbstractRemoteTestNG.java:132)在org.testng.remote。远程测试NG.initAndRun(RemoteTestNG.java:230)在org.testng.remote。RemoteTestNG.main(RemoteTestNG.java:76)

这种随机的失败严重地损害了我的进步。如果我在XML文件上一次只启用一个浏览器,而没有其他浏览器,则不会出现任何故障。

1

2个答案2

重置为默认值
2

正如我所看到的,您的问题是@testrun-before-load浏览器(您必须增加等待时间)。另一件事是您没有添加任何优先级。首先,您获得浏览器的方式。你必须使用壁虎河、chromedriver等。

尝试使用如下浏览器

if(browser.equalsIgnoreCase(“chrome”)){System.setProperty(“webdriver.chrome.driver”,“/Path/ToChromeDriver/chromedriver.exe”);driver=新ChromeDriver();System.out.println(“Chrome Selected”);}

添加如下优先级

浏览器浏览器;@参数({“浏览器”})@测试前公共void浏览器选择(字符串浏览器){browser.launch(浏览器);线程休眠(5000)//不建议这样做,但如果这样做会隐式增加等待时间,则超时也可能是一个问题}@测试后公共void cleanupAfterTest(){Print.line(“测试完成。正在清理…”);browser.quit();}@测试(优先级=1,描述=“测试1”)public void setUserName(){浏览器.goToPage(“http://www.google.com网站");屏幕截图.page(“转到谷歌”);}@测试(优先级=2,说明=“测试2”)public void setPassword(){浏览器.goToPage(“http://www.yahoo.com网站");Screenshot.page(“转到雅虎”);}
0

我也面临着同样的问题。请在下面找到我解决此问题所遵循的流程:-

  1. 请确保代码中提到的驱动程序的路径正确,并且代码中引用的所有浏览器的“.exe”文件都可用。

  2. 现在,如果这是正确的,请下载与您的系统兼容的最新驱动程序版本

    ->从下载chrome驱动程序-https://chromedriver.chromium.org/下载

    ->从下载firefox驱动程序-https://github.com/mozilla/geckodriver/releases网站

    ->从下载IE驱动程序-https://www.seleniumhq.org/下载/

注意-如果您使用的是64位系统,请下载32位版本,否则IE上的测试处理将非常缓慢。

此外,请确保所有安全级别设置都正确,如此问题的答案中所述:

无法使用Java的Selenium2(Webdriver)启动IE浏览器

->用于Edge的MicroSoftWebDriver与您的操作系统构建版本兼容。有关更多详细信息,请查看此问题的详细答案(由我提供):-

Java/Selenium:打开Edge的简单程序失败(依赖性问题?)

执行上述步骤解决了我的问题

您的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策

不是你想要的答案吗?浏览标记的其他问题问你自己的问题