如何从c#更改selenium WebDriver优先级?
我试图让我的测试在专用服务器上运行得更快。我注意到,通常测试运行缓慢,但当我增加firefox优先级(默认情况下,该优先级低于正常值)时,测试运行速度会快得多 我在如何从c#更改selenium WebDriver优先级?,c#,selenium,selenium-firefoxdriver,C#,Selenium,Selenium Firefoxdriver,我试图让我的测试在专用服务器上运行得更快。我注意到,通常测试运行缓慢,但当我增加firefox优先级(默认情况下,该优先级低于正常值)时,测试运行速度会快得多 我在FirefoxDriver中寻找一个可以让我选择进程优先级的设置,但我找不到 有人能告诉我如何在selenium中设置web驱动程序优先级吗?我不同意您为什么这样做,我认为简单地更改优先级并不是解决问题的方法 没有公开API来执行此操作,因此您可以向Selenium开发人员发送请求() 因此,在Selenium创建浏览器会话后,您必须
FirefoxDriver
中寻找一个可以让我选择进程优先级的设置,但我找不到
有人能告诉我如何在selenium中设置web驱动程序优先级吗?我不同意您为什么这样做,我认为简单地更改优先级并不是解决问题的方法 没有公开API来执行此操作,因此您可以向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进程的父进程。也就是说,是什么进程启动了Firefox进程
复制代码没有意义,但这个解决方案对我来说很好:……这会变得很棘手,因为用户可以通过多种方式启动Firefox,但如果他们使用的是快捷方式/开始菜单列表项,则父进程将是explorer
您没有提到运行测试所使用的解决方案。无论是通过Visual Studio的测试运行程序、NUnit自己的GUI、TeamCity、CruiseControl、Jenkins、TFS还是其他CI解决方案,您都需要检查是什么启动了Firefox进程,以确定它是“用户创建的”Firefox实例还是来自Selenium测试的实例。“当我提高Firefox优先级时”您的意思是在启动任何特定于浏览器的驱动程序之前更改功能吗???不,我的意思是,在ProcessExplorer中,您不能在Selenium中执行此操作。相反,您应该询问“ProcessExplorer如何设置进程的优先级?”,然后自己使用Windows API。如果速度是您唯一关心的问题,您可以使用htmldriver,因为这应该要快一点。但是,您将失去在真正的Firefox浏览器上进行实际测试的好处。与系统进程挂钩是个坏主意。更好的解决方案是增加该机器上的cpu/内存。实际上,selenium为它使用的每个驱动程序启动一个单独的firefox进程。您可以同时使用2个WebDriver,并获得2个firefox进程。在这种情况下,您的解决方案不起作用。此外,如果在非专用机器上运行,这有时会改变用户Firefox的优先级。要确定用户创建的流程和Selenium/您的测试解决方案创建的流程,您需要查看“父”流程:(我不认为流程之间有任何区别,除了启动它的原因)…再次,可能是由于硬件问题或测试的结构问题,测试运行缓慢。它们在您自己的机器和专用服务器上运行缓慢吗?不必麻烦要求Selenium开发人员提供这样的功能。它几乎肯定会被拒绝,因为它与远程WebDriver没有密切关系,几乎不可能实现。