【问题标题】:How to use one parameter for all pages and test using Page Object Model pattern (Webdriver + Java + JUnit)?如何为所有页面使用一个参数并使用页面对象模型模式(Webdriver + Java + JUnit)进行测试?
【发布时间】:2018-05-07 10:22:24
【问题描述】:

在所有页面和测试中,我指定了变量 String domain =" https:// ... ",有时我需要在不同的域上运行相同的测试。是否可以为所有测试和页面指定一个带有域的变量一次(这样当我更改变量的值时,所有测试都在另一个域上运行)?

public class test {
    public static WebDriver driver;
    public static pageLogin login;
    public static pageMain main;
    
    String domain = "http://testdomain.com";
    
    @BeforeClass
...

【问题讨论】:

标签: java selenium-webdriver


【解决方案1】:

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

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 void getScreen(WebDriver name) throws Exception { File srcFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE); FileHandler.copy(srcFile, new File("/Users/admin/Desktop/" + name + ".jpg")); } name == WebDriver 和您尝试截取未初始化的驱动程序的屏幕截图。
  • 是的,它可以工作,但是我的超类中的函数有一个问题:public class main { private WebDriver driver; public static String domain = "http://testdomain.com"; public void getScreen(String name) throws Exception { File srcFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); FileHandler.copy(srcFile, new File("/Users/admin/Desktop/" + name + ".jpg")); } 我在测试中使用了 getScreen 函数,但是在我在超类“main”中指定 getScreen 后,它开始返回“NullPointerException ”。你不知道问题出在哪里?
猜你喜欢
  • 2019-12-05
  • 2017-06-22
  • 1970-01-01
  • 1970-01-01
  • 2018-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多