在硒多窗口测试中关闭窗口

时间:2018-02-13 08:29:19

标签: node.js selenium session selenium-webdriver geckodriver

我目前正在开发一个项目,需要使用多个窗口,每个窗口都需要不同的会话和cookie。

创建每个窗口并完成其工作后,需要关闭它。然后重复这个过程。

如图所示,窗口以数组形式创建。

var fOptions = new firefox.Options();
var profile = new firefox.Profile('./fProfile');
fOptions.setProfile(profile);    
driver[0] = new Builder().withCapabilities({'browserName': 'firefox'}).setFirefoxOptions(fOptions).build();
driver[1] .....

关闭窗户的最佳方法是什么: 使用driver [index] .close() 或者司机[index] .quit()

使用驱动程序[索引]时,我有时会遇到此错误This driver instance does not have a valid session ID (did you call WebDriver.quit()?) and may no longer be used. .quit()

还可以从我的TEMP目录中获取大量 tmp- [abcd] 文件夹,并从未删除的会话中猜测。

我对任何能够在多窗口测试中实现新会话的解决方案持开放态度

我正在使用带有gecko驱动程序的Selenium的nodeJS实现。

1 个答案:

答案 0 :(得分:1)

当您在数组中创建窗口时,关闭窗口的最佳方法是使用:

driver[index].close()

分析

当您调用 quit() 时, webdriver :: server 会将 DELETE 发送到 geckodriver :: marionette 整个会话如下:

webdriver::server   DEBUG   -> DELETE /session/f84dbafc-4166-4a08-afd3-79b98bad1470 

geckodriver inturn将"quit"信号和"eForceQuit"标志一起发送到 marionette ,如下所示:

geckodriver::marionette TRACE   -> 37:[0,3,"quit",{"flags":["eForceQuit"]}]

marionette 最终会生成 Marionette 不接受任何进一步连接的日志"shutdown",如下所示:

1518532363988   Marionette  DEBUG   New connections will no longer be accepted
1518532364053   Marionette  TRACE   0 <- [1,3,null,{"cause":"shutdown"}]
1518532364088   geckodriver::marionette TRACE   <- [1,3,null,{"cause":"shutdown"}]
1518532364089   webdriver::server   DEBUG   Deleting session
1518532364089   geckodriver::marionette DEBUG   Stopping browser process
1518532364519   webdriver::server   DEBUG   <- 200 OK {"value": {}}

虽然您的驱动程序实例已编入索引,但由于 Marionette 停止接受连接,因此您会发现以下错误:

This driver instance does not have a valid session ID (did you call WebDriver.quit()?) and may no longer be used.

相反,如果您调用 close() webdriver :: server 会将 DELETE 发送到 geckodriver :: marionette 特定会话的风势仅限如下:

1518532935982   webdriver::server   DEBUG   -> DELETE /session/3694b8b7-89b1-4249-a710-0915ad2e867e/window 
1518532935983   geckodriver::marionette TRACE   -> 16:[0,4,"close",{}]
1518532935985   Marionette  TRACE   0 -> [0,4,"close",{}]   

因此其他 Windows / TAB 将不受影响。

更新

如果您仔细观察 GeckoDriver 日志,很明显 Marionette 在创建新会话时挖出新的moz:profile,如下所示:

1518532230009   mozrunner::runner   INFO    Running command: "C:\\Program Files\\Mozilla Firefox\\firefox.exe" "-marionette" "-profile" "C:\\Users\\user_name\\AppData\\Local\\Temp\\rust_mozprofile.TxhOyDz3ozxL"

此活动由 WebDriver 实例(即 GeckoDriver )管理和处理。这个工作流程在实践中,因为我们从 Legacy Firefox 迁移到基于Marionette的Firefox ,并且这些工作在临时目录中堆叠起来。截至目前,我没有看到 GeckoDriver 测试执行结束时清理杂务。因此,清除rust_moz folders的解决方案是至少在执行 Test Suite 之前和之后定期运行CCleaner工具。

您可以在_Is it Firefox or Geckodriver, which creates “rust_mozprofile” directory_

中找到关于_“rust_mozprofile”_目录的详细讨论