如何对所有页面使用一个参数并使用页面对象模型模式(Webdriver+;Java+;JUnit)进行测试?

如何对所有页面使用一个参数并使用页面对象模型模式(Webdriver+;Java+;JUnit)进行测试?,java,selenium-webdriver,Java,Selenium Webdriver,在所有页面和测试中,我都指定变量字符串domain=“https://…”,有时我需要在不同的域上运行相同的测试。是否可以为所有测试和页面指定一个域变量(这样当我更改变量的值时,所有测试都在另一个域上运行) 公共类测试{ 公共静态WebDriver; 公共静态页面登录; 公共静态pageMain; 字符串域=”http://testdomain.com"; @课前 …我总是创建一个“超级类”屏幕页面对象,在其中保存我的驱动程序实例和全局变量,如下面的示例所示: public class Scr

在所有页面和测试中,我都指定变量字符串domain=“https://…”,有时我需要在不同的域上运行相同的测试。是否可以为所有测试和页面指定一个域变量(这样当我更改变量的值时,所有测试都在另一个域上运行)

公共类测试{
公共静态WebDriver;
公共静态页面登录;
公共静态pageMain;
字符串域=”http://testdomain.com";
@课前

我总是创建一个“超级类”屏幕页面对象,在其中保存我的驱动程序实例和全局变量,如下面的示例所示:

public class Screen {
    private String currentScreen = "Page";
    private boolean isLoaded = false;
    private MobileDriver driver;

    public Screen(MobileDriver mobileDriver) {
        this.driver = mobileDriver;
    }

public String getCurrentScreen() {
    return name;
}

public void setCurrentScreen(String name) {
    this.name = name;
}


public boolean isLoaded() {
    return isLoaded;
}

public void setLoaded(boolean loaded) {
    isLoaded = loaded;
}
因此,我用它扩展了我的所有其他页面对象类,在这里我使用getter/setter提供了驱动程序和所有需要的全局变量

这就是子页面对象类的外观

public class OnBoardingScreen extends Screen{
    @AndroidFindBy(id = "onboarding_content")
    @WithTimeout(time = 1, unit = TimeUnit.SECONDS)
    private MobileElement labelContent;

    @AndroidFindBy(id = "onboarding_skip_intro")
    @WithTimeout(time = 1, unit = TimeUnit.SECONDS)
    private MobileElement buttonSkipIntro;


    public OnBoardingScreen(MobileDriver driver) {
        super(driver);
        PageFactory.initElements(new AppiumFieldDecorator(driver, 2, TimeUnit.SECONDS), this);

        WaitUtils.isElementPresent(driver, buttonSkipIntro, 1);

        if (!Util.areElementsLoaded(labelTitle, labelContent, buttonSkipIntro)) {
            super.setLoaded(false);
        } else {
            super.setLoaded(true);
        }

因此,通过在这个超级类中添加域变量,您当然可以对测试进行这种设计。

我总是制作一个“超级类”屏幕页面对象,在其中保存驱动程序实例和全局变量,如下面的示例所示:

public class Screen {
    private String currentScreen = "Page";
    private boolean isLoaded = false;
    private MobileDriver driver;

    public Screen(MobileDriver mobileDriver) {
        this.driver = mobileDriver;
    }

public String getCurrentScreen() {
    return name;
}

public void setCurrentScreen(String name) {
    this.name = name;
}


public boolean isLoaded() {
    return isLoaded;
}

public void setLoaded(boolean loaded) {
    isLoaded = loaded;
}
因此,我用它扩展了我的所有其他页面对象类,在这里我使用getter/setter提供了驱动程序和所有需要的全局变量

这就是子页面对象类的外观

public class OnBoardingScreen extends Screen{
    @AndroidFindBy(id = "onboarding_content")
    @WithTimeout(time = 1, unit = TimeUnit.SECONDS)
    private MobileElement labelContent;

    @AndroidFindBy(id = "onboarding_skip_intro")
    @WithTimeout(time = 1, unit = TimeUnit.SECONDS)
    private MobileElement buttonSkipIntro;


    public OnBoardingScreen(MobileDriver driver) {
        super(driver);
        PageFactory.initElements(new AppiumFieldDecorator(driver, 2, TimeUnit.SECONDS), this);

        WaitUtils.isElementPresent(driver, buttonSkipIntro, 1);

        if (!Util.areElementsLoaded(labelTitle, labelContent, buttonSkipIntro)) {
            super.setLoaded(false);
        } else {
            super.setLoaded(true);
        }

因此,通过在这个超类中添加域变量,您当然可以对测试进行这种设计。

如果您使用maven,请检查这个——如果您使用maven,请检查这个——您没有初始化变量。public void getScreen(WebDriver name)抛出异常{File srcFile=((TakesScreenshot)driver)。getScreenshotAs(OutputType.FILE);FileHandler.copy(srcFile,new FILE(“/Users/admin/Desktop/“+name+”.jpg”);}name==WebDriver和您尝试使用未初始化的驱动程序截图。是的,它可以工作,但我的超类中的函数有一个问题:
public class main{私有WebDriver驱动程序;公共静态字符串域=”http://testdomain.com“public void getScreen(字符串名)抛出异常{File srcFile=((TakesScreenshot)driver).getScreenshotAs(OutputType.File);FileHandler.copy(srcFile,new File(“/Users/admin/Desktop/”+name+”.jpg”);}
我在测试中使用了getScreen函数,但在我在超类“main”中指定getScreen后,它开始返回“NullPointerException”。你不知道问题出在哪里?你没有初始化变量。public void getScreen(WebDriver名称)抛出异常{File srcFile=((TakesScreenshot)driver)。getScreenshotAs(OutputType.FILE);FileHandler.copy(srcFile,new FILE(“/Users/admin/Desktop/“+name+”.jpg”);}name==WebDriver和您尝试使用未初始化的驱动程序截图。是的,它可以工作,但我的超类中的函数有一个问题:
public class main{私有WebDriver驱动程序;公共静态字符串域=”http://testdomain.com“public void getScreen(字符串名)抛出异常{File srcFile=((TakesScreenshot)driver).getScreenshotAs(OutputType.File);FileHandler.copy(srcFile,new File(“/Users/admin/Desktop/”+name+”.jpg”);}
我在测试中使用了getScreen函数,但在超类“main”中指定getScreen后,它开始返回“NullPointerException”。您不知道问题出在哪里?