使用Webdriver页面对象模型处理大量WebElements的断言

时间:2014-01-22 16:34:48

标签: java selenium junit pageobjects

我有一个包含50个奇怪的WebElements的页面,我想断言它们有正确的文本。我正在使用Page Objects,因此Test与对象分开,Test是断言必须存在的地方。

我不希望每个元素有50个单独的@Test's,所以我需要某种集合,List或数组来保存文本值,然后断言每个元素。但是,如果一个文本值错误,我不希望测试失败(可能是页面经常更新并包含50个值的情况)。对于每个断言,这都指向@Test的分离?

所以我需要在PageObject中为每个元素做一个driver.findElement(.....)。

然后,我需要将WebElement的值作为String(s)传递给测试类,最好是在一个方法中使用.getText())。

我需要断言测试类中50个值中的每个值都是正确的,最好是在一个@Test下,但如果一个值不正确,则测试失败。

我已经和它搏斗了几个小时,对不起,如果不清楚并为大量文字道歉;我是一个初学者 - 如果我能澄清请问。我很遗憾,这显然是一种常见的方法。

谢谢

1 个答案:

答案 0 :(得分:1)

如果您使用的是JUnit 4.0+,则可以使用parameterized tests

  • 带注释@RunWith(Parameterized.class)
  • 的测试类
  • 带有注释@Parameters的静态方法(这将返回一个嵌套的参数数组)
  • 课程中的测试将针对每组参数运行一次

上面的wiki链接示例:

@RunWith(Parameterized.class)
public class FibonacciTest {
    @Parameters
    public static Collection<Object[]> data() {
        return Arrays.asList(new Object[][] {

                 { 0, 0 }, { 1, 1 }, { 2, 1 }, { 3, 2 }, { 4, 3 }, { 5, 5 },{ 6, 8 }  
           });
    }

    private int fInput;

    private int fExpected;

    public FibonacciTest(int input, int expected) {
        fInput= input;
        fExpected= expected;
    }

    @Test
    public void test() {
        assertEquals(fExpected, Fibonacci.compute(fInput));
    }
}