我正在测试一个Web应用程序,我的示例测试用例有三个步骤:
点击“登录”
driver.findElement(By.id("username")).sendKeys(username);
driver.findElement(By.id("password")).sendKeys(password);
driver.findElement(By.id("LoginButton")).click();
我需要生成一个报告,指定哪些步骤通过,哪些步骤失败。是否有一些机制可以让我知道每条线都成功执行了? Selenium是否有某种内置的活动/事件监听器?
答案 0 :(得分:2)
如果您想记录所有基本步骤,例如点击,导航,查找元素等
我建议你添加一些事件监听器。您可以使用EventFiringWebDriver类。
一个例子:
EventFiringWebDriver events = new EventFiringWebDriver(this._driver);
events.Navigated += new EventHandler<WebDriverNavigationEventArgs>(eventAfterNavigate);
您可以将事件处理程序定义为
private void eventAfterNavigate(object sender, WebDriverNavigationEventArgs e)
{
Log("URL visited: " + e.Driver.Url); // Call to your favourite log method
}
您可以在Webdriver API参考中找到更多可能的事件处理程序:http://selenium.googlecode.com/svn/trunk/docs/api/dotnet/html/AllMembers_T_OpenQA_Selenium_Support_Events_EventFiringWebDriver.htm
答案 1 :(得分:1)
您可以使用Verify或Assert来确保页面上存在或不存在某些内容。验证将返回布尔值并继续运行,而Assert on false将停止测试。
在这种特殊情况下,您可以验证是否在id = username的元素中键入了用户名。所以你的代码看起来像这样:
driver.findElement(By.id("username")).sendKeys(username); // this will enter username
assertEquals(selenium.getValue("id=username"), username); // this will check that text in your username field is 'username' (also you may use Assert.IsTrue)
据我所知,Selenium 2 Webdriver中有verifyTextPresent,所以你可以使用它:
try
{
assertEquals(selenium.getValue("id=username"), username); // put message into your log: success
}
catch (Exception)
{
// put message into your log: failed
}
我建议验证按钮点击,但等待您登录的某些通知:例如可能会出现“Hello,{username}”文本,或者也可能出现新元素(登录前缺席)。因此,如果此元素存在 - 您肯定已登录。
答案 2 :(得分:0)
如果您想查看每个步骤是否成功,那么我会设置一些断言(取决于您的单元测试框架)以验证步骤是否成功。
例如,要检查用户名字段是否实际收到输入,您可以立即验证用户名字段是否包含输入用户名的文本。
一些伪代码:
IWebElement element = driver.findElement(By.id("username"));
element.sendKeys(username);
assertsEquals(username, element.text);
同样,要验证单击是否成功,您可以检查并断言下一页上预期的元素是否存在,这将表明登录成功。
答案 3 :(得分:0)
如果Selenium没有抛出异常,则行成功执行。
但问题是你如何定义成功?我会检查点击LoginButton后加载的网站,以确保Web应用程序的行为与您期望的一样。