0

我正在使用 Selenium 和SimpleBrowser对我的网站进行一些无头浏览器测试。我想在所有请求中手动设置“主机”条目。这样我就可以设置一个 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"));
  }
}
4

1 回答 1

-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 标头添加到请求中。您要求的是网络浏览器的不正确行为。如果服务器期望 IP 地址上特定站点的主机标头,您应该使用 Selenium/SimpleBrowser 从代码中完成与普通浏览器完全相同的操作。输入带有域名的完整 URL。不添加假标题。

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

于 2013-07-25T15:42:41.677 回答