c# - Node 上带有 HtmlUnit 的 WebDriver Grid 与 Node CPU Hook

标签 c# webdriver htmlunit selenium-grid

我使用 C# 和 Gallio/mbUnit 编写一组非常简单的测试,打开浏览器,导航到 google.com,在搜索框中键入“seleniumhq”,然后单击搜索按钮。

我创建我的主机:

java -jar \"C:\\selenium-server-standalone-2.15.0.jar\" -role hub -port 4444

和我的节点:

java -jar \"C:\selenium-server-standalone-2.15.0.jar\" -role node -hub http://[hostIP]:4444/grid/register -port 5556 -browser browserName=htmlunit,platform=ANY,version=firefox,maxInstances=1

我创建我的 webDriver 实例,我使用:

driver = new RemoteWebDriver("http://localhost:4444/wd/hub", DesiredCapabilities.HtmlUnitWithJavaScript());

我正在监控我的节点机器,当测试开始时,CPU 固定到 99%,仅运行 1 个测试。我在等待搜索按钮显示时超时...它就在那里,只是不可见,即使在 40 秒后也是如此:

var wait = new WebDriverWait(WebDriver, new TimeSpan(0, 0, 0, 40)); 
wait.Until(m => m.FindElement(By.Name("btnG")).Displayed);

关于为什么该元素对于 HtmlUnit 始终不可见有什么想法吗?

关于远程节点上 HtmlUnit 的 CPU 占用率达到或接近 100% 并且内存峰值高达 800,000K 的任何想法?

我复制了相同的测试以创建 10 个相同的测试,如果我删除点击搜索按钮代码,HtmlUnit 测试需要 65 秒。此测试使用两个节点,每个节点的 DegreeOfParallelism 设置为 10,MaxInstances 设置为 5。当我使用 Chrome 使用相同的参数运行相同的测试时,它们会在 35 秒内运行,而且我没有看到 CPU 变得疯狂。有人对此有任何想法吗? HtmlUnit 应该比我读过的快 4 倍。我猜我有一些错误应该是相当明显的。

感谢所有帮助和建议。

最佳答案

有点晚了,但是:

要了解 HtmlUnitDriver 正在做什么,请使用 jstack <pid> 获取线程转储.您可能会看到它已死锁或陷入循环。

我在使用较旧的 HtmlUnit 版本时遇到了一些死锁和挂起问题,但最新的 Selenium server versions (2.31.0) 使用的 HtmlUnit 2.11 似乎已经解决了这些问题。

看起来您使用的是包含 HtmlUnit 2.9 的 Selenium 2.15,这可能是问题所在。

关于c# - Node 上带有 HtmlUnit 的 WebDriver Grid 与 Node CPU Hook ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8706732/

相关文章:

c# - 如何针对属性优化 Linq to Xml 查询?

使用 ConfigureAwait(false) 的 C# async/await 链接

javascript - 使用 Javascript 禁用 gridview 中的文本框

java - Selenium Webdriver 无法在下拉列表中选择值

selenium - 当我调用 initElements 时,@FindBy 不关心元素是否不存在

java - 405 测试 Spring 应用程序时不支持请求方法 'POST'

c# - 将字符串转换为有效的日期时间

java - 我们可以使用 selenium Webdriver 访问 ICICI、HDFC、SBI 等银行网站的 Web 元素以实现自动化吗?

gwt - HtmlUnitDriver 的可靠性如何?

java - htmlunit java更改输入文本