我目前正在开发一个项目,需要使用多个窗口,每个窗口都需要不同的会话和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实现。
答案 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”_目录的详细讨论