一般的想法是为您的元素设置参数化定位器,这些定位器将根据所选语言采用不同的值(取自 i18n 文件)。
您可以使用this lib,这样您就可以像这样为所有语言构建一个页面对象:
import click.webelement.pagefactory.parameterized.FindByParameterized;
import click.webelement.pagefactory.parameterized.PageObjectParameterized;
import org.openqa.selenium.SearchContext;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
public class MyPage extends PageObjectParameterized {
@FindByParameterized(xpath = "//button[@name='{wec:btn.name}']")
WebElement button;
@FindByParameterized(xpath = "//label[text()='{wec:lbl.text}']")
WebElement label;
@FindBy(xpath = "//input")
WebElement input;
public MyPage(SearchContext searchContext) {
super(searchContext);
}
}
然后您的测试将如下所示:
@DataProvider(name = "languages")
Object[][] dataProvider(){
return new Object[][]{
{"en", "Press me", "Read me"},
{"ru", "Нажми меня", "Прочти меня"}
};
}
@Test(dataProvider = "languages")
public void testPage(String language, String btnLocator, String labelLocator){
driver.get(URL + "/" + language);
DefaultParameterProvider
.properties
.set(Map.of("btn.name", btnLocator, "lbl.text", labelLocator));
MyPage myPage = new MyPage(driver);
myPage.button.click();
myPage.label.getText();
}
还有an article,其中解释了上面实现的概念的一些细节,以便您可以以自己的方式实现它。