2013-07-24 52 views
0

我使用Selenium和SimpleBrowser來做一些我的網站的無頭瀏覽器測試。我想在所有請求中手動設置「主機」條目。這樣我可以創建一個IIS實例,並綁定到dns中實際不存在的域名。如何在Selenium中使用SimpleBrowser webdriver時手動設置主機頭?

我想要做的正是這個(工作):

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")); 
    } 
} 
+0

看看[Browsermob-proxy項目](http://bmp.lightbody.net/)。 [Java的API可以輕鬆用於此任務,但文檔說他們也會很快將它添加到其REST API中。](https://github.com/lightbody/browsermob-proxy#http -request-manipulation)由於有一個2.0 beta 8版本,它可能已經包含了這個功能(雖然我不確定,但我是Java API的一個開心用戶),所以看看。 –

回答

0

在思維方式硒,這不應該是什麼,你應該做任何事情。您的測試代碼應該模仿用戶行爲。 Selenium驅動程序應該連接到瀏覽器和瀏覽器(無論是Firefox,Chrome還是SimpleBrowser)應該自動添加主機頭。總是實際上。 我們應該將其納入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))。

+0

所以,我想SimpleBrowser.Browser.SetHeader(「主持人:www.asldkfhjawoeij.com」),但我碰到的這個http://stackoverflow.com/questions/239725/cannot-set-some-http-headers-when - 使用系統淨的WebRequest問題,其中「主機」是受限頭,不能用一個簡單的httpWebRequest.Headers.Add(「宿主:www.asldkfhjawoeij.com」)來設定這正是SimpleBrowser確實與SetHeader可以()參數。 –

相關問題