尝试查找多个元素时@FindAll有点慢

时间:2016-09-20 23:04:23

标签: java performance selenium findall

我有一个本地化的页面,“创建帐户”WebElement可以是英文,中文或日文。我正在使用Selenium,Java和TestNG框架运行测试来点击这个元素。但是,使用此@FindAll识别页面时性能下降让我想知道是否有更好的方法可以做到这一点。

选择“英语”语言环境时Inspect元素中的元素:

<div class="form-group">
        <a translate="create-account" class="pointer ng-scope" ng-click="vm.createAccount()">Create Account</a>
    </div>

我的FindAll声明:

@FindAll({
    @FindBy(linkText="Create Account"),
    @FindBy(linkText="创建账号"),
    @FindBy(linkText="アカウントを作成")
})
private List<WebElement> createAccount;

作为比较的基准,如果我使用上面的@FindAll,则在Webdriver点击链接之前大约需要15秒。如果我只使用@FindBy,则大约需要2-3秒。但是,@ .FindBy对我不起作用,因为我需要能够找到正确的区域设置来点击链接。

2 个答案:

答案 0 :(得分:1)

您可以使用单个css选择器,如:
a[ng-click*='createAccount']

或其中一个xpath:

//a[contains(@ng-click, 'createAccount')]
//a[contains(text(), 'Create Account') or contains(text(), '创建账号') or contains(text(), 'アカウントを作成')]

对于css,如果您传递部分属性值,那么它应该是[@attributeName*='part_of_attribute_value']
请查看此处查看css规则的基本列表w3schools css selectors

答案 1 :(得分:0)

感谢@lauda提供帮助以及与w3 css选择器的链接。 我实际上找到了另外两种使用css识别此链接的方法:

@FindBy(css="a[translate='create-account']")
private WebElement CreateAccount;

@FindBy (css="a.pointer.ng-scope")
private WebElement CreateAccount;

但是,不知道为什么lauda发布的原始解决方案对我不起作用。

a[ng-click*='createAccount']