【问题标题】:Is it possible to hide the browser in Selenium RC?是否可以在 Selenium RC 中隐藏浏览器?
【发布时间】:2023-04-10 19:48:01
【问题描述】:

我正在使用 Selenium RC 自动执行一些浏览器操作,但我希望浏览器不可见。这可能吗?如何? Selenium 网格呢?我也可以隐藏 Selenium RC 窗口吗?

【问题讨论】:

  • 可能无法接受,但是您不能将浏览器从屏幕上移开(使用常规的 Windows UI 自动化吗?)比如将窗口放置在 (-10000, -10000)?
  • 由于这个问题现在已经很老了,让我将您重定向到正确的最新答案at the bottom of this page

标签: python selenium selenium-rc


【解决方案1】:

使用无头 Chrome 是您最好的选择,或者您可以直接发布到该站点以与其交互,这将为其他事物/进程节省大量计算能力。我在测试使用 cpu 重元素在多个站点上搜索鞋子的网络自动化机器人时使用它,您节省的功率越多,程序越简单,一次运行多个进程就越容易,而且速度更快,并且可靠性。

【讨论】:

    【解决方案2】:

    在许多情况下,PhantomJS 不能完全满足您的需求,我想详细说明 Dave Hunt 的回答中提到的 headless chrome 选项。

    chrome 57 刚刚推出了这个功能。您可以通过 ChromeDriver 传递 --headless 标志来使用它,更多信息请参阅this question中的讨论

    【讨论】:

      【解决方案3】:

      在 Linux 上,您可以在无头(虚拟)显示器中运行 WebDriver 以隐藏浏览器。这可以通过 Xvfb(X 虚拟帧缓冲区)来完成。

      您可以使用xvfbwrapper 直接从 Python 代码控制 Xvfb: https://github.com/cgoldberg/xvfbwrapper

      无头运行的 Python 代码如下所示:

      from selenium import webdriver
      from xvfbwrapper import Xvfb
      
      display = Xvfb()
      display.start()
      
      # now Firefox will run in a virtual display. 
      # you will not see the browser.
      driver = webdriver.Firefox()
      driver.get('http://www.google.com')
      
      print(driver.title)
      driver.quit()
      
      display.stop()
      

      在 Debian/Ubuntu 上安装依赖项:

      $ sudo apt-get install xvfb
      $ pip install xvfbwrapper
      

      【讨论】:

      • 当代码在虚拟浏览器中运行时,我可以在浏览器交互脚本运行的同时继续正常使用我的电脑吗?
      • 资源被占用,你的机器会变慢!
      【解决方案4】:
      curl -k https://gist.githubusercontent.com/terrancesnyder/995250/raw/cdd1f52353bb614a5a016c2e8e77a2afb718f3c3/ephemeral-x.sh -o ~/ephemeral-x.sh
      chmod +x ~/ephemeral-x.sh
      ~/ephemeral-x.sh TestsStarterCommand
      

      顺便说一句,这是任何运行 e2e 的开发人员都需要的功能,它在逻辑上会产生浏览器。在开发环境中,处理不断弹出的窗口以及您可能意外交互导致测试失败的窗口很烦人。

      【讨论】:

        【解决方案5】:

        在 MacOSX 上,我无法隐藏浏览器窗口,但至少我知道如何将其移动到不同的显示器上,这样它就不会过多地干扰我的工作流程。在 Firefox 运行测试时,只需按住 Control 并单击 Dock 中的图标,选择选项,然后分配给显示器 2。

        【讨论】:

          【解决方案6】:

          有几个选项:

          • 您可以使用 Selenium Grid,以便在完全不同的计算机(或虚拟机)上打开浏览器,然后如果您想查看浏览器,您可以通过 VNC 或远程桌面连接连接到该计算机。另外,另一种选择:如果您在该远程服务器上运行 Jenkins 前台进程,它可以在桌面上执行您的测试项目。

          • 您可以在 XVFB 中的 Linux 上“无头”运行 Selenium。我从来没有尝试过这样做,并且怀疑它是否真的值得付出努力。 http://www.alittlemadness.com/2008/03/05/running-selenium-headless/

          • 您可以将 Selenium RC 包装在 Windows 服务中。 http://support.microsoft.com/kb/137890 。除了更高版本的 Windows 的权限限制可能会阻止 Selenium 访问桌面,就像 Windows 2000 过去允许我们做的那样。

          • 另一种选择是使用 WebDriver HTMLUnitDriver 之类的东西,它不会启动“真正的”浏览器。 http://code.google.com/p/webdriver/ 。还有一个 PhantomJS 选项以及您可以使用的“无头 Chrome”。

          • 当然,您还可以选择使用像 SauceLabs 这样的服务,您可以在其中让您的测试在云中运行。测试完成后,您可以观看他们运行的视频。

          【讨论】:

          【解决方案7】:

          我很容易设法隐藏浏览器窗口。

          只需install PhantomJS。然后,改变这一行:

          driver = webdriver.Firefox()
          

          到:

          driver = webdriver.PhantomJS()
          

          您的其余代码无需更改,也不会打开任何浏览器。出于调试目的,请在代码的不同步骤中使用driver.save_screenshot('screen.png')

          【讨论】:

          • 值得一提的是,您必须输入 PhantomJs.exe 的路径才能使其正常工作。例如driver = webdriver.PhantomJS(r"C:\\phantomjs\phantomjs.exe")
          • 可以,但仅限于 Windows。
          • 您不需要指定二进制文件的位置,只要它可以从您环境的 $PATH 环境变量中找到即可。
          • PhantomJS 不再被开发,但 Chrome 有一个headless 选项
          【解决方案8】:

          有一个名为 GhostDriver 的 PhantomJS 相关项目,旨在使用 webdriver 有线 JSON 协议在 Selenium Grid 中运行 PhantomJS 实例。这可能就是您正在寻找的,尽管这个问题现在已经有 4 年了。

          【讨论】:

            【解决方案9】:

            在 Linux 上,您可以在虚拟显示器上运行测试浏览器。您将需要 xvfb 包来创建虚拟 X 服务器。在基于 Debian 的发行版上,只需运行

            sudo apt-get install xvfb
            

            有一个很好的工具ephemeral-x.sh 可以方便地设置任何命令以在虚拟显示器上运行。 Download it 并使其可执行:

            wget https://raw.github.com/jordansissel/xdotool/master/t/ephemeral-x.sh
            chmod +x ephemeral-x.sh
            

            然后你可以简单地使用它来启动 Selenium 服务器:

            ./ephemeral-x.sh java -jar selenium-standalone.jar
            

            Selenium 创建的所有浏览器窗口现在都将使用虚拟显示器,并且对您不可见。

            【讨论】:

            • 此脚本存在引用问题。如果我说 ./ephemeral-x.sh foo '*' 它会说“正在运行:foo”,然后是我的目录的内容。
            【解决方案10】:

            这就是我在 linux 桌面 (Ubuntu) 上使用 maven 运行测试的方式。我厌倦了无法使用始终保持焦点的 Firefox 网络驱动程序。

            我安装了xvfb

            xvfb-run -a mvn clean install

            就是这样

            【讨论】:

            • 这通常是确保 xvfb 正在运行并被 Selenium/WebDriver 使用的最简单方法。
            【解决方案11】:

            如果您使用的是 Windows,一种选择是在不同的用户帐户下运行测试。这意味着您自己的帐户将看不到浏览器和 Java 服务器。

            【讨论】:

              【解决方案12】:

              +1 将 Selenium RC 作为 Windows 服务。

              为了让测试完全隐藏运行,我认为如果您使用的是 Windows,则没有太多解决方案。

              我会这样做以使您的 LAN 中的一台计算机始终在线并运行 selenium RC 服务器。因此,您使用该计算机的 IP 而不是 localhost 来运行您的测试。例如:

              browser = selenium("10.15.12.34",4444,"*firefox","http://saucelabs.com")
              

              (考虑到这是运行服务器的计算机的 ip)。

              完成该设置后,您可以在您的计算机上运行测试,浏览器和 RC 服务器窗口在另一台计算机上,完成后返回您的计算机。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2016-08-16
                • 2016-01-02
                • 2021-03-23
                • 2010-11-10
                • 2012-10-15
                • 1970-01-01
                • 2011-01-07
                • 2013-01-05
                相关资源
                最近更新 更多