我有一个Selenium测试套件,它运行许多测试,在每次新的测试中,它都会在我打开的任何其他窗口之上打开一个浏览器窗口。在当地工作很不和谐。有没有办法告诉硒或OS (Mac)在后台打开窗口?


当前回答

我建议使用PhantomJS。更多信息,请访问魅影官方网站。

据我所知,PhantomJS只适用于Firefox…

下载PhantomJS. exe后,您需要将其导入到您的项目中,如下图所示。

我把我的放在:common→Library→phantomjs.exe

现在,在Selenium代码中所要做的就是更改该行

browser = webdriver.Firefox()

比如

import os
path2phantom = os.getcwd() + "\common\Library\phantomjs.exe"
browser = webdriver.PhantomJS(path2phantom)

PhantomJS的路径可能会有所不同……想怎么改就怎么改:)

这个方法对我有用,我很确定它对你也有用;)

其他回答

Chrome 57有一个选项来传递——headless标志,这使得窗口不可见。

这个标志不同于——no-startup-window,因为最后一个标志不会启动一个窗口。它是用来托管后台应用程序,正如这页所说。

Java代码传递标志到Selenium webdriver (ChromeDriver):

ChromeOptions options = new ChromeOptions();
options.addArguments("--headless");
ChromeDriver chromeDriver = new ChromeDriver(options);

下面是一个适合我的。net解决方案:

在http://phantomjs.org/download.html下载PhantomJS。

从下载文件夹中的bin文件夹中复制.exe文件,并将其粘贴到Visual Studio项目的bin调试/发布文件夹中。

使用

using OpenQA.Selenium.PhantomJS;

在你的代码中,像这样打开驱动程序:

PhantomJSDriver driver = new PhantomJSDriver();
using (driver)
{
   driver.Navigate().GoToUrl("http://testing-ground.scraping.pro/login");
   // Your code here
}

实现这一点的一种方法是在headless模式下运行浏览器。这样做的另一个好处是测试执行得更快。

请找到下面的代码在Chrome浏览器中设置无头模式。

package chrome;

public class HeadlessTesting {

    public static void main(String[] args) throws IOException {
        System.setProperty("webdriver.chrome.driver",
                "ChromeDriverPath");
        ChromeOptions options = new ChromeOptions();
        options.addArguments("headless");
        options.addArguments("window-size=1200x600");
        WebDriver driver = new ChromeDriver(options);
        driver.get("https://contentstack.built.io");
        driver.get("https://www.google.co.in/");
        System.out.println("title is: " + driver.getTitle());
        File scrFile = ((TakesScreenshot) driver)
                .getScreenshotAs(OutputType.FILE);
        FileUtils.copyFile(scrFile, new File("pathTOSaveFile"));
        driver.quit();
    }
}

自Chrome 57以来,你有无头的论点:

var options = new ChromeOptions();
options.AddArguments("headless");
using (IWebDriver driver = new ChromeDriver(options))
{
    // The rest of your tests
}

Chrome无头模式比UI版本性能提高30.97%。另一个无头驱动程序PhantomJS比Chrome的无头模式好34.92%。

幻影JSDriver

using (IWebDriver driver = new PhantomJSDriver())
{
     // The rest of your test
}

Firefox无头模式的性能比UI版本提高了3.68%。这很令人失望,因为Chrome的无头模式比UI模式的时间长了30%。另一个无头驱动程序PhantomJS比Chrome的无头模式好34.92%。令我惊讶的是,Edge浏览器击败了所有这些浏览器。

var options = new FirefoxOptions();
options.AddArguments("--headless");
{
    // The rest of your test
}

这可以从Firefox 57+中获得

Firefox无头模式的性能比UI版本提高了3.68%。这很令人失望,因为Chrome的无头模式比UI模式的时间长了30%。另一个无头驱动程序PhantomJS比Chrome的无头模式好34.92%。令我惊讶的是,Edge浏览器击败了所有这些浏览器。

注意:PhantomJS不再维护了!

这是一个简单的Node.js解决方案,适用于新版本4。x(也可能是3.x)的硒。

const { Builder } = require('selenium-webdriver')
const chrome = require('selenium-webdriver/chrome');

let driver = await new Builder().forBrowser('chrome').setChromeOptions(new chrome.Options().headless()).build()

await driver.get('https://example.com')

火狐

const { Builder } = require('selenium-webdriver')
const firefox = require('selenium-webdriver/firefox');

let driver = await new Builder().forBrowser('firefox').setFirefoxOptions(new firefox.Options().headless()).build()

await driver.get('https://example.com')

整个程序都在后台运行。这正是我们想要的。