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



我已经使用了C#编写的Selenium webdriver几个月了,我对此非常有能力。这是我工作中的情况,我目前正在测试基于Web的浏览器产品的UI。问题是我需要一次测试许多用户并监视服务器内存等。我过去曾使用Jmeter进行服务器负载测试,我真的很想使用Selenium对尽可能多的用户进行类似的操作。

据我了解,我可能能够使用无头浏览器与Selenium结合使用(对于任何不知道的人,加载多个浏览器都倾向于吃您的机器记忆,并将您限制为6/7浏览器,您可以同时运行您)

所以我想,我将使用一个无头浏览器,看看我可以立即进行多少。我的研究使我相信我可以将SimpleBrowser与Selenium一起使用。

很难找到其中两个组合的示例。因此,我的第一个问题是,如果这是一个无头浏览器,那么页面元素实际上是否存在,还是仅在客户端和服务器之间发送的请求?

例如,如果我使用硒在页面上找到一个元素,我会写

iwebelement用户名= driver.findelement(by.xpath("//input [@ID ='maincontent_txtusername']"));username.sendkeys(userUsername);

我已经为单位测试写了同样的书,并说它已经过去了。但是,当我发送密码并"单击"登录按钮时,我无法获得下一个测试方法。即,在登录后,我希望找到一个带有"更改公司密码"的按钮。该单元测试不会通过,因此它使我相信它没有ac登录。

那么,我的问题是,在无头浏览器中,这些元素根本存在还是如何工作?如果是这样,如何"单击"登录按钮?谢谢大家

这是我的代码:

[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而不是简单浏览器,将其全部与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);
});

相关内容

最新更新