【问题标题】:How to Close Xvfb after usage使用后如何关闭 Xvfb
【发布时间】:2014-09-12 05:41:50
【问题描述】:

我正在使用 Xvfb 在无头 Firefox 中运行一些测试。但是,在我的测试完成后,我想恢复正常显示。但我做不到。这就是我正在做的事情。

  1. 打开一个终端
  2. sudo Xvfb :10 -ac &
  3. 导出 DISPLAY=:10
  4. 使用 RobotFramework+ Selenium 执行我的测试

在第 4 步之后,我想在同一个终端中打开 Firefox,但我无法看到它,因为它指向 :10 显示。

我想知道如何关闭此 (xvfb :10) 以便我可以打开 Firefox 并查看它。

【问题讨论】:

  • 您是否尝试过在测试前保存 DISPLAY 的值,然后在测试后将其设置回该值?
  • 像魅力一样工作,显然我存储了 DISPLAY 的默认值,将其设置为新值,运行测试,然后按照您的建议,再次将 DISPLAY 设置为默认值。
  • vmenezes给出的使用xvfb-run的答案比较好。它将导出 DISPLAY 变量并在完成后自动清理。 1. 创建测试脚本 2. chmod a+x 脚本 3. xvfb-run -s "-ac" ./test_script 4. 打开firefox

标签: selenium robotframework xvfb


【解决方案1】:

简单的解决方法是保留DISPLAY的旧值,将其更改为指向xvfb,然后在运行测试后将其更改回保存的值。

这会使 xvfb 继续运行,因此您还应该获取该进程的 pid 并将其杀死。否则,如果您将这组步骤运行十几次,您将有十几个 xvfb 进程在后台运行。

【讨论】:

  • 在执行 xvfb 后必须进行清理是有问题的,因为您 (1) 您必须记住这样做,并且 (2) 您必须确保启动的进程已经完成。我认为 vmenezes 的答案应该被标记为接受的答案,因为它解决了这两个问题。
【解决方案2】:

第二个命令末尾的 & 告诉 Linux 在后台运行它命令。您可以看到使用$ jobs 运行的后台命令列表。 Ubuntu16.04 上的示例:

$ sudo Xvfb :10 -ac &
[1] 31294
$ jobs -l
[1]+ 31294 Running                 sudo Xvfb :10 -ac &

正如您在上面的输出中看到的那样,jobs -l 显示后台作业,输出的第二列是PID,可用于将其杀死为$ sudo kill 31294

另一个可能更“干净”的选项是启动Xvfb 只是为了运行您想要的命令并自动退出而不是让它在后台运行。这样,您可以将第 2,3 和 4 行替换为:

xvfb-run python my_selenium_tests.py

只需将python my_selenium_tests.py 替换为运行测试的任何方式即可。它将打开Xvfb 并在最后关闭。

【讨论】:

  • xvfb-run 是迄今为止最好的选择——它运行命令并在命令终止后自动清理。但是,如果您需要使用此帧缓冲区运行多个命令,您可能需要创建一个脚本并使用 xvfb-run 来执行它——它会自动为子进程/shell 导出 DISPLAY 变量。
猜你喜欢
  • 2018-09-12
  • 1970-01-01
  • 1970-01-01
  • 2019-06-09
  • 1970-01-01
  • 2012-08-16
  • 2022-11-12
  • 2018-10-15
  • 1970-01-01
相关资源
最近更新 更多