0

有一个注册表,其中包含许多必填字段。将执行以下测试:

  • 在每次迭代中,在每个字段中输入一个值或执行适当的操作(如单击或选择)
  • 除了一个 - 所以在每次迭代中都应该省略一个不同的字段

这模拟了想要注册但忘记输入值的用户。应出现适当的错误。

在页面对象中,我为每个输入元素( 、 等)预定义了方法setFirstName()——setLastName()这些clickSomething()方法被其他测试用例使用。显然,我可以将这些方法复制并粘贴十次,每次都留下一个,但这远非优雅。另一个明显的解决方案是为页面上的输入元素创建一个单独的对象并将对象放入列表中;但这也相当广泛。

是否有一种简单的方法可以循环选择属于一个对象的一组方法?

4

1 回答 1

0

最后,情况变得更加复杂,因此需要创建一个同时处理输入字段及其错误字段的对象,以及一些更方便的功能。

  protected class InputElement{
    private By input;
    private WebElement inputElement = null;
    private By errorField;
    private WebElement errorElement = null;
    private String value;
    protected By getInput() {
        return input;
    }

    protected String getValue() {
        return value;
    }

    protected WebElement getInputElement() {
        return inputElement;
    }

    protected WebElement getErrorElement() {
        return errorElement;
    }

    protected void setValue(String value){
        this.value = value;
        if(inputElement == null){
            inputElement = driver.findElement(input);
        }

        inputElement.clear();
        inputElement.sendKeys(value);
    }

    protected void clear(){
        if(inputElement == null){
            inputElement = driver.findElement(input);
        }

        inputElement.clear();
    }

    protected void setValue(){
        setValue(this.value);
    }

    /**
     * Checks if there is currently an error message.
     * 
     * @param input
     * @return true if an error exists for this element. 
     */
    public boolean hasError(){
        errorElement = elementExistsInContext(inputElement, errorField);
        if(errorElement == null){
            return false;
        }
        return true;
    }

    protected InputElement(By input, By errorField){
        this.input = input;
        this.errorField = errorField;
    }

    protected InputElement(By input, By errorField, String value){
        this.input = input;
        this.errorField = errorField;
        this.value = value;
    }
}
于 2013-11-04T12:08:05.510 回答