如何从c#更改selenium WebDriver优先级?

时间:2013-01-06 23:01:49

标签: c# selenium selenium-firefoxdriver

我正在尝试让我的测试在专用服务器上运行得更快。我注意到,通常测试运行缓慢,但是当我增加firefox优先级(默认情况下低于正常值)时,它们运行得更快。

我在FirefoxDriver寻找一个设置,让我选择流程优先级,但我找不到。

有人能指出我如何在selenium中设置网络驱动程序优先级吗?

1 个答案:

答案 0 :(得分:2)

我不同意你这样做的原因,我认为只是改变优先级是解决问题的方法。

没有公开API,因此您可以向Selenium开发人员发送请求(http://code.google.com/selenium)。

因此,您必须在 Selenium创建浏览器会话后更改优先级

您需要找到该过程:

var fireFoxProcesses = Process.GetProcessesByName("firefox");

这将返回Process个对象的数组,但是,如果您正在运行一个又一个的测试,则应该只打开一个firefox.exe个进程。这是我的假设。因此,我们得到了实际的过程对象:

// should only be one, unless you are opening a few tests in concurrently.
var actualFirefoxProcess = fireFoxProcesses.First();

最后,改变它的优先级:

actualFirefoxProcess.PriorityClass = ProcessPriorityClass.High;

我猜这可能会变得有点不可靠。

修改

至于“用户创建的”Firefox的区别,以及Selenium运行的一个,您可以查看firefox进程的父进程。也就是说,什么过程启动了Firefox进程?

复制代码没有意义,但这个解决方案对我来说效果很好:How can I get the PID of the parent process of my application ...这样会变得棘手,因为用户可以多种方式启动Firefox,但是如果他们使用快捷方式/开始菜单列表项,父流程将是资源管理器

您没有提到用于运行测试的解决方案。无论是通过Visual Studio的Test Runner,NUnit自己的GUI,TeamCity,CruiseControl,Jenkins,TFS还是其他一些CI解决方案,你都需要检查是什么启动了Firefox进程以确定它是否是“用户创建的”Firefox实例或来自Selenium测试的实例。