我刚刚重建了我的开发机器,现在我遇到了运行Selenium测试的问题。我知道我的设置存在问题,因为当我将新代码和测试推送到构建服务器时,它们会毫无问题地通过。在此机器上进行重建之前,测试通常没有问题。我已经尽可能简化了我的测试用例,以便尝试隔离错误。
我的站点测试站点是一个本地ASP.NET MVC站点,并在不到200毫秒的时间内响应请求。
我的简单失败案例如下:尝试登录:
using OpenQA.Selenium.Firefox;
using OpenQA.Selenium;
using System.Threading;
class Program
{
static void Main(string[] args)
{
FirefoxDriver driver = new FirefoxDriver();
try
{
driver.Navigate().GoToUrl("http://test.mysite.com/Account/Login/");
driver.FindElement(By.Name("UserName")).SendKeys("AdminUser");
driver.FindElement(By.Name("Password")).SendKeys("AdminPassword");
driver.FindElement(By.Id("log-in-btn")).Click();
}
finally
{
driver.Quit();
}
}
}
问题是它并不总是失败,并且它并不总是在同一个地方失败。有些运行所有命令都会执行。在其他时候,任何FindElement行都将失败,并出现以下错误:
NullReferenceException在OpenQA.Selenium.Remote.HttpCommandExecutor.CreateResponse(WebRequest请求)中未将对象引用设置为对象的实例
WebDriverException对URL http://localhost:7055/hub/session/eff6f0c7-84e1-451d-adc8-1f02324d08ae/element
的远程WebDriver服务器的HTTP请求在60秒后超时。在OpenQA.Selenium.Remote.HttpCommandExecutor.CreateResponse(WebRequest request)
即使测试在上一段时间内出现上述错误之一,但仍然没有做任何操作,测试浏览器仍然保持响应,并且可以手动完成测试。
我真的是在撕扯我的头发。在过去的几天里,我尝试过许多不同的组合,例如不同的Firefox版本,切换到Chrome,切换回Selenium.WebDriver 2.39.0都具有相同的结果。
我意识到这对于Selenium来说是一个非常流行的错误,但我希望这个简单的测试用例可以帮助追踪造成这个特定版本的原因。
答案 0 :(得分:1)
Selenium WebDriver使用JSON over HTTP与浏览器进行通信,由于防病毒/反恶意软件程序通常会“挂钩”到浏览器中,因此它们也可能无意中干扰或阻止有效流量。
在测试期间或测试环境中关闭防病毒和防火墙程序可以帮助解决此类问题。