使用带有Selenium的SimpleBrowser webdriver时如何手动设置主机头?

时间:2013-07-24 20:13:03

标签: .net selenium webdriver

我正在使用Selenium和SimpleBrowser对我的网站进行无头浏览器测试。我想在所有请求中手动设置'host'条目。这样我就可以设置一个IIS实例,绑定到dns中实际不存在的域名。

我想做到这一点(有效):

var req = (HttpWebRequest)WebRequest.Create("http://204.144.122.223");
req.Host = "www.asldkfhjawoeij.com";
Console.WriteLine(req.GetResponse().GetResponseStream().ReadToEnd());

但是使用Selenium和SimpleBrowser。在下面的代码中,我是否覆盖主机头,如果我可以的话?

[Test]
[TestCase("https://204.144.122.223.com/")]
public void CanGetHomepageAndVariousOtherUrls(string server)
{
  using (var browser = new SimpleBrowserDriver())
  {
    browser.Url = server;
    browser.FindElement(By.Id("home"));
  }
}

1 个答案:

答案 0 :(得分:-1)

在Selenium的思维方式中,这不应该是你应该做的任何事情。您的测试代码应该模仿用户行为。 Selenium驱动程序应该将您连接到浏览器,浏览器(无论是Firefox,Chrome还是SimpleBrowser)应该自动添加Host标头。实际上。 我们应该将它包含在SimpleBrowser添加的默认标题中。

作为一种解决方法,SimpleBrowser有一个SetHeader()方法,您可以使用它来添加所需的任何标头。您可以将在特定版本的浏览器中传递的驱动程序实例化为参数,因此您可以在正确的时间调用SetHeader方法。

但实际上,我们应该在SimpleBrowser本身修复它。 https://github.com/axefrog/SimpleBrowser/pull/60

进一步检查:SimpleBrowser做得很好。如果您导航到Url(即http://www.asldkfhjawoeij.com/),它会自动将Host标头添加到请求中。您要求的是Web浏览器的错误行为。如果服务器期望IP地址上的特定站点的主机头,则应该使用Selenium / SimpleBrowser从代码中完全按照普通浏览器执行的操作。输入包含域名的完整URL。不添加假标题。

如果您的问题是DNS中尚未知道主机名,您可以设置测试运行器环境来伪造它。您可以将其添加到本地DNS或主机文件(http://en.wikipedia.org/wiki/Hosts_(file))。