首页 > 解决方案 > 使用 selenium webdriver 的多语言自动化测试

问题描述

我正在开发支持多语言的自动化项目,这里的疑问是,我们有像仪表板这样的页面或任何我们将有许多字符串和文本的页面,因此验证每个测试用例中的所有文本将是如此冗长,所以会是什么最好的方式或方法。我也创建了属性文件,但仍然不知道如何一次验证多个字符串。请帮我优化测试用例。

enter code here

{ 请帮忙 }

标签: javaselenium-webdrivertestngpom.xmlproperties-file

解决方案


一般的想法是为您的元素设置参数化定位器,这些定位器将根据所选语言采用不同的值(取自 i18n 文件)。

您可以使用此库,以便以如下方式为所有语言构建一个页面对象:

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();
}

还有一篇文章解释了上面实现的概念的一些细节,以便您可以按照自己的方式实现它。


推荐阅读