2016-06-21 351 views
1

我一直使用用C#編寫的Selenium Webdriver幾個月,現在我得到了相當的能力。這是我的工作場景,我正在測試基於Web的瀏覽器產品的用戶界面。問題是我需要立即測試許多用戶並監視服務器內存等。我過去曾經使用過jMeter進行服務器負載測試,並且我非常希望使用硒來儘可能地爲儘可能多的用戶做類似的事情。C# - Selenium Webdriver - 無頭瀏覽器 - 單元測試 - 基礎知識

根據我的理解,我可能可以使用無頭瀏覽器與Selenium結合使用(對於任何不知道的情況,加載多個瀏覽器往往會讓您的機器內存吃光,並限制您可以在6/7瀏覽器下運行同時)

所以我想,我將使用一個無頭瀏覽器,看看我能一次走多少。我的研究讓我相信我可以使用SimpleBrowser和硒一起實現這一點。

很難找到這兩個組合的例子。所以我的第一個問題很多,如果這是一個無頭瀏覽器,頁面元素是否真的存在,或者它只是在客戶端和服務器之間發送的請求?

例如,如果我使用硒找到一個頁面上的元素我會寫

IWebElement用戶名= driver.FindElement(By.XPath( 「//輸入[@ ID = 'MainContent_txtUsername']」) ); username.SendKeys(userUserName);

我已經寫了相同的單元測試,並說它已通過。但是,當我發送密碼並「單擊」登錄按鈕時,我無法獲得下一個TestMethod通過。即登錄後我希望找到一個值爲「更改公司密碼」的按鈕。這個單元測試沒有通過,所以它導致我相信它沒有執行登錄。

所以,我的問題是,在無頭瀏覽器中是否存在這些元素或者它們是如何工作的?如果是這樣,我該如何「點擊」登錄按鈕?謝謝你們

這裏是我的代碼:

[TestMethod] 
     public void AddPhoneToCartAndVerifyInCart() 
     { 
      //This is the placeholder to write actual code. 
      Assert.AreEqual(" SPC Connect ", driver.Title); 
     } 
     [TestMethod] 
     public void LogIn() 
     { 
      Assert.IsTrue((driver.FindElement(By.XPath("//input[@class='btn btn-info']")).Text).Contains("Login")); 
      IWebElement username = driver.FindElement(By.XPath("//input[@id='MainContent_txtUsername']")); 
      username.SendKeys(userAccount); 
      IWebElement password = driver.FindElement(By.XPath("//input[@id='MainContent_txtPassword']")); 
      password.SendKeys(userPassword); 
      IWebElement clickSubmit = driver.FindElement(By.XPath("//input[@class='btn btn-info']")); 
       clickSubmit.Click(); 

     } 
     [TestMethod] 
     public void LogInSuccess() 
     { 
      Assert.IsTrue((driver.FindElement(By.XPath("//input[@id='MainContent_btnChangeCompanyPassword']")).Text).Contains("Change Company Password")); 

     } 

回答

1

是的,這些元素仍然在無頭的瀏覽器存在。如果你正確配置它,你不應該真的需要改變你的測試。 下面是一個示例(我一直在使用PhantomJS代替SimpleBrowser,與StructureMap接線這一切 - 但原則應該是或多或少相同):

For<IWebDriver>().Use(() => 
{ 
    var options = new PhantomJSOptions(); 
    options.AddAdditionalCapability("javascriptEnabled", true); 
    options.AddAdditionalCapability("unexpectedAlertBehaviour", "accept"); 
    options.AddAdditionalCapability("handlesAlerts", true); 
    options.AddAdditionalCapability("databaseEnabled", true); 
    options.AddAdditionalCapability("applicationCacheEnabled", true); 
    options.AddAdditionalCapability("locationContextEnabled", true); 
    options.AddAdditionalCapability("webStorageEnabled", true); 
    options.AddAdditionalCapability("acceptsSslCerts", true); 
    options.AddAdditionalCapability("browserConnectionEnabled", true); 
    return new PhantomJSDriver(options); 
});