我在C#/ NUnit中有一系列Selenium2测试用例,它们按顺序运行。每个测试用例都在WebDriver的新实例中运行(这是必要的)-这意味着,每次到达新的测试用例时,都会在我正在处理的其他任何事物的顶部打开一个新的浏览器窗口。 >
是否可以将WebDriver配置为在后台自动打开浏览器?如果我手动将其放置在后台,则测试仍然可以正常运行...但是每隔几分钟必须执行一次,这使得运行完整的测试并同时进行其他操作变得很困难。

评论

这可能很有用:stackoverflow.com/questions/5370762/…

对编程(和质量检查)相当陌生,我希望WebDriver API内可能有一些简单的解决方案,而我不希望不使用第三方工具。我想我可能还是不走运。一个有用的链接-谢谢。

#1 楼

较重的解决方案可能最终为您带来更大的灵活性/控制力,那就是在本地计算机上的VM中运行所有测试。使用虚拟机,设置快照非常容易,因此可以确保在每次测试运行时都将测试环境重置为特定的已知点。真是太好了。您可以最小化VM窗口,而根本不干预它。

此外,由于测试是在VM中运行的,并且您正在使用WebDriver,因此有可能同时针对所有驱动程序运行所有测试您所有的目标浏览器。 (我对WebDriver和SeleniumServer不太熟悉,所以我不知道是否可以做到。我想可以。)

#2 楼

您可以通过设置特定于驱动程序的设置来执行此操作。例如,假设您使用的是Chrome。启动Chrome驱动程序时,可以按以下方式设置Chrome选项:

DesiredCapabilities capabilities = DesiredCapabilities.Chrome();
capabilities.SetCapability("chrome.switches", new List<String>() { 
    "--start-maximized",
    "--disable-popup-blocking" });
driver = new OpenQA.Selenium.Chrome.ChromeDriver(capabilities);


如果存在这种选项,则可以最小化启动Chrome。

让我知道您使用的是哪种浏览器,我将看看是否可以为您跟踪窗口最小化逻辑。

编辑:

在Firefox中执行操作的方法如下:

FirefoxProfile profile = new FirefoxProfile();

// See: http://kb.mozillazine.org/About:config_entries for a complete list of profile settings.
profile.SetPreference( "browser.link.open_newwindow.restriction", 1);

// Run driver with this profile this profile:
driver = new OpenQA.Selenium.Firefox.FirefoxDriver(profile);


评论


谢谢,我使用的是Firefox,Chrome和IE9,因此我将尝试使用Chrome,并告诉您它的运行情况。

– SteveCZ
2012年12月12日15:46

我已经在Chrome和Firefox上尝试了上述方法,但不幸的是没有成功。 Chrome驱动程序不接受DesiredCapabilities作为参数。它确实接受ChromeOptions-我能够设置影响浏览器的选项(例如--start-maximized),但是没有最小化或在后台打开的选项。谢谢您的帮助!

– SteveCZ
2012年3月13日在11:25

根据上面代码中引用的Mozillazine.org页面,将browser.link.open_newwindow.restriction设置为1意味着“让JavaScript打开的所有窗口都在新窗口中打开”。

–史蒂夫HHH
13年2月1日在19:13

#3 楼

最近,我在PhantomJS上取得了巨大的成功。唯一失败的测试是涉及javascript警报的测试,但是无论如何应该尽快实现该功能。

您可以使用以下命令启动PhantomJS:

phantomjs.exe --webdriver=4444


并配置selenium以使用远程Web驱动程序

var hubUrl = new Uri("http://127.0.0.1:4444/wd/hub");
var capabilities = DesiredCapabilities.PhantomJS();
var driver = new RemoteWebDriver(hubUrl, capabilities);


然后PhantomJS将在后台运行,而不会从其他工作中夺取焦点。

评论


“应该尽快实施”哈! :)大约3年后,这个问题仍然存在。

–吉利
2014年11月25日23:59

#4 楼

如果您不太在意所使用的驱动程序(Firefox,Chrome,IE),请尝试以下一种方法:
http://seleniumhq.org/docs/03_webdriver.html#htmlunit-driver

它没有GUI,但是使用与上面列出的浏览器不同的JS引擎,这可能导致不同的行为,并因此导致遗漏或误报的错误。

#5 楼

继续浏览当前稀疏的C#文档后,我发现DriverCommand枚举包含SetBrowserVisible成员。似乎尚未实现。

这不能立即解决问题,但了解...很有用。

评论


而且它将永远不会实现。这是您可以启动Internet Explorer并使其不可见时遗留的遗产。随着Windows Vista / IE7中保护模式的出现,Microsoft使这种情况变得不可能。顺便说一句,如果您想为该项目提供文档,我们很乐意接受补丁。

– JimEvans
2012年3月28日在17:52

谢谢-这很有用。我当然也会考虑提供一些文档。

– SteveCZ
2012年3月29日在9:52