Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#-Selenium Webdriver-无头浏览器-单元测试-基础_C#_Unit Testing_Selenium_Webdriver_Headless Browser - Fatal编程技术网

C#-Selenium Webdriver-无头浏览器-单元测试-基础

C#-Selenium Webdriver-无头浏览器-单元测试-基础,c#,unit-testing,selenium,webdriver,headless-browser,C#,Unit Testing,Selenium,Webdriver,Headless Browser,我已经使用了用C#编写的Selenium Webdriver几个月了,现在我已经相当熟练了。这是我的工作场景,我目前正在测试基于web的浏览器产品的UI。问题是我需要一次测试多个用户并监视服务器内存等。我过去使用jMeter进行服务器负载测试,我真的希望使用selenium对尽可能多的用户进行类似的测试 据我所知,我可能能够使用无头浏览器和Selenium实现这一点(对于任何不知道的人来说,加载多个浏览器往往会消耗您的机器内存,并将您的同时运行的浏览器限制在6/7以下) 所以我想,我将使用一个无

我已经使用了用C#编写的Selenium Webdriver几个月了,现在我已经相当熟练了。这是我的工作场景,我目前正在测试基于web的浏览器产品的UI。问题是我需要一次测试多个用户并监视服务器内存等。我过去使用jMeter进行服务器负载测试,我真的希望使用selenium对尽可能多的用户进行类似的测试

据我所知,我可能能够使用无头浏览器和Selenium实现这一点(对于任何不知道的人来说,加载多个浏览器往往会消耗您的机器内存,并将您的同时运行的浏览器限制在6/7以下)

所以我想,我将使用一个无头浏览器,看看一次可以运行多少个。我的研究使我相信我可以使用SimpleBrowser和selenium来实现这一点

很难找到两者结合的例子。因此,我的第一个问题是,如果这是一个无头浏览器,那么页面元素是否确实存在,或者只是在客户端和服务器之间发送的请求

例如,如果我使用selenium在页面上查找元素,我会编写

IWebElement用户名=driver.FindElement(By.XPath(//input[@id='MainContent\u txtUsername']); username.SendKeys(userUserName)

我已经为单元测试写了同样的内容,并且说它已经通过了。但是,当我输入密码并“单击”登录按钮时,我无法获得下一个要通过的TestMethod。i、 e.登录后,我希望找到一个值为“更改公司密码”的按钮。这个单元测试没有通过,所以它让我相信它没有真正登录

所以,我的问题是,在一个无头浏览器中,这些元素是否存在,或者如何工作?如果是,如何“单击”登录按钮?谢谢各位

这是我的密码:

[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"));

        }

是的,这些元素仍然存在于无头浏览器中。如果您正确地配置了它,您就不需要真正地修改您的测试。 下面是一个示例(我一直在使用PhantomJS而不是SimpleBrowser,用StructureMap将其连接起来,但原理应该大致相同):

For()。使用(()=>
{
var options=newphantomjsoptions();
options.AddAdditionalCapability(“javascriptEnabled”,true);
选项。添加额外能力(“意外的行为”、“接受”);
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);
返回新的PhantomJSDriver(选项);
});
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);
});