在 selenium multi-window 测试中关闭 windows
Closing windows in selenium multi-window test
我目前正在从事一个需要使用多个 windows 的项目,每个都需要不同的会话和 cookie。
每个 window 创建并完成其工作后,需要将其关闭。然后重复这个过程。
windows 创建在数组中,如图所示。
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] .....
关闭 windows 的最佳方法是什么:
使用驱动程序 [index].close()
或驱动程序[index].quit()
我有时 运行 在使用 驱动程序 [index].quit() 时出现此错误 This driver instance does not have a valid session ID (did you call WebDriver.quit()?) and may no longer be used.
而且我的 TEMP 目录中还有很多 tmp-[abcd] 文件夹,我是从未删除的会话中猜测的。
我愿意接受任何在多重 window 测试中实现新会话的解决方案
我正在使用带有 gecko 驱动程序的 Selenium 的 nodeJS 实现。
当您在数组中创建 windows 时,关闭 windows 的最佳方法是使用 :
driver[index].close()
分析
当您调用 quit()
时,webdriver::server 发送 DELETE geckodriver::marionette 整个会话如下:
webdriver::server DEBUG -> DELETE /session/f84dbafc-4166-4a08-afd3-79b98bad1470
geckodriver 依次发送 "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 / TABs 将不受影响。
更新
如果您仔细观察 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"
这个 activity 由 WebDriver 实例管理和处理,即 GeckoDriver 。自从我们从 Legacy Firefox 迁移到基于 Marionette 的 Firefox 以来,这个工作流就在实践中,这些叠加在 临时目录。到目前为止,我没有看到 GeckoDriver 在 Test Execution 结束时清理杂务。因此,清理 rust_moz folders
的解决方案是定期使用 运行 CCleaner
工具,至少在执行 测试套件 之前和之后。
您可以在
中的 _“rust_mozprofile”_ 目录中找到详细讨论
我目前正在从事一个需要使用多个 windows 的项目,每个都需要不同的会话和 cookie。
每个 window 创建并完成其工作后,需要将其关闭。然后重复这个过程。
windows 创建在数组中,如图所示。
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] .....
关闭 windows 的最佳方法是什么: 使用驱动程序 [index].close() 或驱动程序[index].quit()
我有时 运行 在使用 驱动程序 [index].quit() 时出现此错误 This driver instance does not have a valid session ID (did you call WebDriver.quit()?) and may no longer be used.
而且我的 TEMP 目录中还有很多 tmp-[abcd] 文件夹,我是从未删除的会话中猜测的。
我愿意接受任何在多重 window 测试中实现新会话的解决方案
我正在使用带有 gecko 驱动程序的 Selenium 的 nodeJS 实现。
当您在数组中创建 windows 时,关闭 windows 的最佳方法是使用 :
driver[index].close()
分析
当您调用 quit()
时,webdriver::server 发送 DELETE geckodriver::marionette 整个会话如下:
webdriver::server DEBUG -> DELETE /session/f84dbafc-4166-4a08-afd3-79b98bad1470
geckodriver 依次发送 "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 / TABs 将不受影响。
更新
如果您仔细观察 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"
这个 activity 由 WebDriver 实例管理和处理,即 GeckoDriver 。自从我们从 Legacy Firefox 迁移到基于 Marionette 的 Firefox 以来,这个工作流就在实践中,这些叠加在 临时目录。到目前为止,我没有看到 GeckoDriver 在 Test Execution 结束时清理杂务。因此,清理 rust_moz folders
的解决方案是定期使用 运行 CCleaner
工具,至少在执行 测试套件 之前和之后。
您可以在