首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态使用@FindBy获取linkText值(本地化)

动态使用@FindBy获取linkText值(本地化)
EN

Stack Exchange QA用户
提问于 2017-08-29 19:45:23
回答 2查看 7K关注 0票数 2

首先,谢谢你抽出时间。

问题:

我正在自动化一个产品,在不久的将来,它将启用多语言支持,我已经设置了一个从.properties文件(English.propertiesFrench.properties等)读取的简单资源包。

在我的pages中,我有一些@FindBy符号引用了页面上一些超链接的linkText,例如:“忘记密码”。当我们切换区域设置时,这个linkText显然会改变。

我是否放弃了这些@FindBy(linkText = "Forgot Password")定位器,并使用其他可用的东西来定位它们,这不会对语言产生影响。

有什么方法可以让我在@FindBy中提供动态内容来满足这种需求?例如:

代码语言:javascript
复制
@FindBy(linkText = (Language.getLanguage().getString("foo"))

我很好奇人们在这个问题上做了什么?

尝试我的解决方案将返回以下内容:

注释属性FindBy.linkText的值必须是常量表达式。

EN

回答 2

Stack Exchange QA用户

回答已采纳

发布于 2017-08-30 09:29:37

我不会在这里使用链接文本来查找元素,因为我假设元素应该在那里,不管语言如何。最好找一个不随语言变化的属性,比如Id或类名,并创建特定的测试用例来检查是否使用了正确的语言,

例如

代码语言:javascript
复制
@FindBy(id = "foo")
WebElement elm;

public boolean isLinkTextInCorrectLanguage(WebElement elm, String lang){
    return elm.getText().contains(lang);     
}
票数 3
EN

Stack Exchange QA用户

发布于 2017-09-02 16:01:14

除了@Camarde之外,如果您不能轻松地使用id(例如,在Ember应用程序中),您可以使用一个根据其文本生成WebElement的工厂。

一些Page对象:

代码语言:javascript
复制
final String FORGOT_PASS_TEXT = "Forgot Password";    

public text getTextFromForgotPassword() {
  WebElement forgotPasswordElem = localizatedElementsFactory.findElementWithText(FORGOT_PASS_TEXT, rootElem);
  return forgotPasswordElem.getText();
}

localizatedElementsFactory工厂应该是这样的:

代码语言:javascript
复制
LocalizedTextRetriver loc_text_retriver = ...

public WebElement findElementWithText(text, rootElem) {
   return rootElem.findElementByText(loc_text_retriver.getLocalizedText(text));
}

LocalizedTextRetriver将是一个从语言中检索文本的接口。这样,您可以在运行时注入要测试的语言,所有测试都将通过localizatedElementsFactory搜索具有本地化文本的元素。

票数 0
EN
页面原文内容由Stack Exchange QA提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://sqa.stackexchange.com/questions/29271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档