>我有一个要求,我想用硒测试以下场景:
- 打开 xhtml 页面,数据表中的值为 10。
- 将数据库中的值从 10 更改为 20
- 单击刷新按钮(无需再次打开相同的 xhtml 页面),值现在应该是 20。
以下是我正在做的事情。但没有成功..
@Test
@InSequence(1)
public void addTestData() {
Warp.initiate(new Activity() {
@Override
public void perform() {
OurPage page = OurPage.on(selenium).withPath(SetupTestData.PATH);
page.addTestDataFor(REFRESH_SHOULD_WORK);
}
}).inspect(new Inspection() {
private static final long serialVersionUID = 1L;
});
}
@InSequence(2)
@Test
public void refreshShouldWork() {
Warp.initiate(new Activity() {
@Override
public void perform() {
CountryDetailsPage page = new CountryDetailsPage(selenium).withPath(CountryDetailsPage.PATH);
page.open();
System.out.println("*** PAGE OPENED ****");
waitGui().until().element(page.table(PROGRESSES_TABLE)).is().present();
assertThat(page.table.row(FIRST).cell(FIFTH).text(), is("10"));
// FIXME: Need to find out the way to change the value
page.refresh().click();
System.out.println("*** CLICKED REFRESH ****");
waitGui().until().element(page.table(PROGRESSES_TABLE)).is().present();
assertThat(page.table.row(FIRST).cell(FIFTH).text(), is("20"));
}
}).inspect(new Inspection() {
private static final long serialVersionUID = 1L;
@AfterPhase(RENDER_RESPONSE)
public void beforeRenderResponse() {
System.out.println("*** AFTER RENDER RESPONSE****");
}
@AfterPhase(Phase.APPLY_REQUEST_VALUES)
public void afterRenderResponse() {
System.out.println("*** AFTER APPLY REQUEST VALUES ****");
}
});
}
如果您知道如何实现这一点,请告诉我。谢谢
由于Selenium仅自动化UI,因此您应该让其他技术处理数据库。 Selenium本身无法连接到任何数据库并更改您想要的内容。
您可以使用 Java 来执行此操作。 更具体地说,使用 Java 数据库连接 (JDBC)。
以下是 Vogella 使用的一个例子
try {
// this will load the MySQL driver, each DB has its own driver
Class.forName("com.mysql.jdbc.Driver");
// setup the connection with the DB.
connect = DriverManager
.getConnection("jdbc:mysql://localhost/feedback?"
+ "user=sqluser&password=sqluserpw");
// statements allow to issue SQL queries to the database
statement = connect.createStatement();
// resultSet gets the result of the SQL query
resultSet = statement
.executeQuery("select * from FEEDBACK.COMMENTS");
writeResultSet(resultSet);
// preparedStatements can use variables and are more efficient
preparedStatement = connect
.prepareStatement("insert into FEEDBACK.COMMENTS values (default, ?, ?, ?, ? , ?, ?)");
// "myuser, webpage, datum, summary, COMMENTS from FEEDBACK.COMMENTS");
// parameters start with 1
preparedStatement.setString(1, "Test");
preparedStatement.setString(2, "TestEmail");
preparedStatement.setString(3, "TestWebpage");
preparedStatement.setDate(4, new java.sql.Date(2009, 12, 11));
preparedStatement.setString(5, "TestSummary");
preparedStatement.setString(6, "TestComment");
preparedStatement.executeUpdate();
...
} catch (Exception e) {
throw e;
} finally {
close();
}
}
更新上面的代码以更新实际的 mysql 字段,您将成为黄金。 虽然我认为这不是一个很好的测试,但同样,UI 应该进行更改,而 Selenium 应该检测到它。 这可能是集成测试的良好候选项。不是硒测试。