Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从c#更改selenium WebDriver优先级?_C#_Selenium_Selenium Firefoxdriver - Fatal编程技术网

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

如何从c#更改selenium WebDriver优先级?,c#,selenium,selenium-firefoxdriver,C#,Selenium,Selenium Firefoxdriver,我试图让我的测试在专用服务器上运行得更快。我注意到,通常测试运行缓慢,但当我增加firefox优先级(默认情况下,该优先级低于正常值)时,测试运行速度会快得多 我在FirefoxDriver中寻找一个可以让我选择进程优先级的设置,但我找不到 有人能告诉我如何在selenium中设置web驱动程序优先级吗?我不同意您为什么这样做,我认为简单地更改优先级并不是解决问题的方法 没有公开API来执行此操作,因此您可以向Selenium开发人员发送请求() 因此,在Selenium创建浏览器会话后,您必须

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

我在
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没有密切关系,几乎不可能实现。