单元测试 - 硒测试页面而不再次打开页面



>我有一个要求,我想用硒测试以下场景:

  1. 打开 xhtml 页面,数据表中的值为 10。
  2. 将数据库中的值从 10 更改为 20
  3. 单击刷新按钮(无需再次打开相同的 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 应该检测到它。 这可能是集成测试的良好候选项。不是硒测试。

相关内容

  • 没有找到相关文章

最新更新