【发布时间】:2014-01-10 05:43:33
【问题描述】:
我正在使用 Selenium Webdriver 对网站进行自动化测试。在每个事件之后,我都想验证操作是否成功。最好的方法是什么。 例如,当用户单击登录按钮时,如何验证是否加载了正确的网页? 我现在正在做的一件事是获取结果页面的来源并在该页面中查找特定单词以进行确认。如果这些词在那里,我假设该页面确实已加载。但我不认为这是一个很好的方式。
【问题讨论】:
我正在使用 Selenium Webdriver 对网站进行自动化测试。在每个事件之后,我都想验证操作是否成功。最好的方法是什么。 例如,当用户单击登录按钮时,如何验证是否加载了正确的网页? 我现在正在做的一件事是获取结果页面的来源并在该页面中查找特定单词以进行确认。如果这些词在那里,我假设该页面确实已加载。但我不认为这是一个很好的方式。
【问题讨论】:
您应该测试一般功能,而不是样式等是否正确。与手动测试相比,自动测试的优势在于,用各种不同的数据测试东西真的很容易,并且在更改后重新运行它们的速度很快。通常,您假设页面看起来是正确的,并且您只想在多种不同情况下测试您的程序逻辑。
例如,如果您登录,请检查用户是否显示为已登录,并且假设首页正确显示(通过仅出现在首页特定位置的某些文本)。或者,如果您有一个多页表单,用户在其中输入各种数据,请检查摘要页面是否正确列出了所有内容。
不要检查获取整个源并解析它,而是应该使用类似的东西:
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.*;
import org.junit.*;
public class LoginTest extends WebDriverTest /* This would be your own superclass, from which you inherit the WebDriver instance. */ {
private User user = new User();
@Before
public void setUp() {
user.setName("Test Tommy");
user.setPassword("foobar");
}
@Test
public void userNameShouldBeShownAfterLogin() {
// Go to your page and do the login, then wait for page load.
String userNameOnPage = driver.findElement(By.id("usernameAfterLogin"));
assertThat(userNameOnPage, is(equalTo(user.getName())));
}
}
【讨论】:
如果您使用 Selenium Webdriver,您显然可以使用 WebDriver.findElement(By locator) 来检查某个对象是否只会出现在您正在等待的页面中。例如,要检查登录是否成功,您可以验证页面中是否存在“注销”对象。
您不必获取源代码并检查所需的文本。如果 Logout 按钮的 id 是“Logout”,则下面的行适合您...
assertTrue(driver.findElements(By.id("Logout").length > 0);
【讨论】:
页面对象设计模式将是满足您要求的理想选择。这一切都带来了其他好处。参考这个链接https://code.google.com/p/selenium/wiki/PageObjects
【讨论】: