SessionNotFoundException:会话ID为null。调用quit()后使用WebDriver吗?(硒)
我不认为driver是null,这将导致NullPointerException它无法知道将它转化成一个方式SessionNotFoundException。因此,看起来像driver已经创建然后结束了,即.quit()如错误消息中所建议的那样被调用得太早。
我认为这是正在发生的事情:
它开始第一个测试并调用@Before。这导致InitializeWebDriver.driver被设置为新的WebDriver。只有在此之后,它才会加载class CommonSteps,因此CommonSteps.driver将其设置WebDriver为刚刚创建的。测试成功运行,并在方法中的.quit()上调用。WebDriver``@After然后开始第二次测试。WebDriver在该@Before方法中创建一个新值。InitializeWebDriver.driver已更新;但是,CommonSteps.driver不会更新,因为driver = InitializeWebDriver.driver;只有在CommonSteps首次加载时才会发生。因此,当它到达driver.get(value),driver是原来的WebDriver,这已是.quit()。这是假设您要连续进行测试。如果它们是并行的,则将有所不同。
基本上,问题在于您使用的静态属性WebDriver,不应在不同的测试运行之间共享这些属性。自从我完成这些工作已经有一段时间了,而且我不记得您是如何存储范围为测试运行的变量的。(在任何情况下,我都无法确定地回答,因为您还没有说明您使用的是哪个测试框架:JUnit,还是其他?)因此,您必须自己修复它,或者询问如何在您使用的任何框架中获取测试范围的变量。
那是您想要正确执行的操作。如果您只想进行廉价的修复,并且不打算并行运行测试,我怀疑可以通过更改driver.get(value);为进行修复InitializeWebDriver.driver.get(value);。实际上,我建议您还是尝试更改此设置,以确保我对此是正确的。
解决方法我正在尝试使用Cucumber /Java编写一些硒自动UI测试。如果我的功能文件中只有一个测试,则一切正常。但是,如果我添加第二个测试,则会在上出现此错误driver.get():
org.openqa.selenium.remote.SessionNotFoundException: Session ID is null. Using WebDriver after calling quit()?Build info: version: ’2.51.0’,revision: ’1af067dbcaedd7d2ab9af5151fc471d363d97193’,time: ’2016-02-05 11:20:57’
基本上,我将在一个包中的InitializeWebdriver类上初始化webdriver变量,然后在其他(步骤定义)类中对其进行引用。我确实将下面的步骤定义作为InitializeWebdriver类的一部分列出,并且工作正常(直到移至另一个类中的另一个步骤。所以我将该步骤移至CommonSteps.java文件中以查看它是否正确)。会失败,然后确实发生了。所以现在我被困住了。我正在考虑if(driver.equals(null))在中@Before执行一个操作,如果已经初始化,则执行其他操作,但是我不知道其他操作会是什么。
这是我的代码:
测试功能
Feature: Two testsBackground: Given I navigate to 'http://www.google.com'Scenario: Test one When something happensScenario: Test two When something else happens
InitializeWebDriver.java
public class InitializeWebDriver { public static WebDriver driver = null; @Before public void beforeScenario() {driver = new ChromeDriver(); } @After public void afterScenario() {driver.quit(); }}
CommonSteps.java
import myPackage.InitializeWebDriver;public class CommonSteps { static WebDriver driver = InitializeWebDriver.driver; @Given('^I navigate to '([^']*)'$') public void i_navigate_to(String url) {driver.get(value); }
谢谢!
相关文章:
1. 老师无限级分类有点难哟 不好理解2. javascript - swiper.js嵌套了swiper 初始设置不能向下一个滑动 结束后重新初始3. python - Django ManyToManyField 字段数据在 admin后台 显示不正确,这是怎么回事?4. 为什么span的color非要内联样式才起作用?5. mysql sum去除重复6. javascript - 怎样去除数组里的几个值,只提供该数组的下标的话7. python - pysciter 如何配置运行环境?8. mysql 能不能创建一个 有列级函数 的联合视图?9. 提示内部服务错误什么问题10. php由5.3升级到5.6后,登录网站,返回的是php代码,不是登录界面,各位大神有知道的吗?

网公网安备