@FindBy和@FindAll在访问元素时返回Invocation错误

时间:2016-05-10 17:22:53

标签: java webdriver

我正在运行一些WebDriver测试并且正在修改一些我想要使用@FindBy()页面对象注释来生成列表WebElements的元素。我可以收集没有问题的个别元素。我想利用它来获得更清晰的代码。

这是该类的一个实现:

 protected class InstElements extends PageBase{
    public InstElements(){
        super();
    }

    @FindAll(@FindBy(how = How.CSS, using = ".skill-symbol.satisfactory.ng-scope"))
    public List<WebElement> satisfactoryLabels;
}

第二次实施:

protected class InstElements extends PageBase{
    public InstElements(){
        super();
    }

    @FindBy(css = ".skill-symbol.satisfactory.ng-scope")
    public List<WebElement> satisfactoryLabels;
}

我收到以下例外:

com.sun.jdi.InvocationException occurred invoking method. 

我知道我可以创建一个方法解析到下面的列表(像魅力一样工作):

 protected class InstElements extends PageBase{
    public InstElements(){
        super();
    }

    private static final String css_subject = ".skill-symbol.satisfactory.ng-scope")
    public List<WebElement> satisfactoryLabels(){

        return driver.findElements(By.cssSelector( css_subject ));
    }
}

但我想利用注释,因为它们提供了更清晰的代码。有人可以让我知道我做错了什么吗?

1 个答案:

答案 0 :(得分:0)

好的,所以我每次使用电话时都可以通过重新调用类来修复自己的问题。

protected class InstElements extends PageBase{
    public InstElements(){
        super();
    }

    @FindBy(css = ".skill-symbol.satisfactory.ng-scope")
    public List<WebElement> satisfactoryLabels;
}

每次使用时实例化似乎都有效,我的意思是每次使用!!

 InstElements test = new InstElements();
 int value = test.satisfactoryLabels.size();

这实际上从列表中返回一个数字而不是一个调用错误