2016-06-21 350 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); 
});