我有一个本地化的页面,“创建帐户”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对我不起作用,因为我需要能够找到正确的区域设置来点击链接。
答案 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']