如何从另一个类调用方法进行测试

时间:2014-05-28 13:33:04

标签: java selenium-webdriver

我试图使用java从另一个类调用一个方法。 所以我所拥有的是从另一个类调用日志方法的类,它运行良好。 在此之后,我想从另一个类调用另一个方法来获取当前的url。

所以我的答案是A和B

问题:如何调用方法来获取当前的url? 谢谢

public class A{

    private String url;

    public A(WebDriver driver){       
        url = driver.getCurrentUrl();
        System.out.println("The current URL is:"+url);
        Util.wait(5);
        }


public class B {        

@BeforeClass
    public static void Log(){
    //some code here to check if log is ok
    }
@Test
    public void A(){
        A test1 = new A(driver);
        String url2 =test1.A();

    } 

2 个答案:

答案 0 :(得分:0)

为字符串网址创建一个getter和setter,以便您可以公开访问它:

public String getUrl() {
    return this.url;
}

哦,安德尔:

public void setUrl(String url) {
    this.url = url;
}

这遵循Java Beans惯例,通过将字段紧密封装到类中,但允许数据不可更改,或者只允许所需数据更改。

例如,如果您愿意,可以说网址不能超过16个字符(仅作为示例):

public void setUrl(String url) {
    if (url.length() <= 16)
        this.url = url;
}

然后阻止更改长度超过16个字符的网址。

然后你可以在测试类中调用它:

@Test
public void getUrl_worksWithUrlLessThan16Length() {
    A test1 = new A(driver);
    String url = "www.google.com";
    A.setUrl(url);
    assertTrue(A.getUrl().equals(url));
} 

编辑:有人要求进一步实施。如下:

你有两个类,A类和B类。假设他们都在自己的源代码文件中。所以现在你有两个看起来像这样的文件:

<强> A.java:

public class A {

    private String url;

    public A(WebDriver driver){       
        url = driver.getCurrentUrl();
        System.out.println("The current URL is:"+url);
        Util.wait(5);
    }

    public void setUrl(String url) {    //THIS IS A SETTER
        this.url = url;
    }

    public String getUrl() {            //THIS IS A GETTER
        return this.url;
    }

}

<强> B.java:

package com.secondClasses.A;

import com.classes.B;

public class B {

A test1;
Webdriver driver;
String url2;

@BeforeClass
public static void Log(){
//some code here to check if log is ok
}

@Before
public void setUp() {
    driver = new WebDriver();
    test1 = new A(driver);
}

@After
public void cleanUp() {
    driver = null;
    test1 = null;
    url2 = null;
    System.gc();
}

@Test
public void A(){
    url2 = test1.getUrl();
    assertTrue(url2.equals(url));
}

}

这里有一些事情发生了:

  1. 您将A类导入B类,以便使用它。

  2. 创建要使用的A类实例。

  3. 2a上。 **(非常重要的一点):**在任何测试方法之前初始化对象引用。注意我说对象引用

    2B。使用注释@Before在setUp()或init()方法中实例化对象,该注释将在每个测试方法运行之前实例化对象 。这有助于使我们的测试彼此独立。

    2c中。然后我们取消引用cleanUp()方法中的对象并建议运行垃圾收集器,这样我们就可以清除堆中的对象了。

    3.然后,要访问A类的字段,我们可以使用它为我们制作的getter和setter方法。   3A。您还需要初始化传递A的构造函数所需的所有字段,例如WebDriver。它们的初始化方式与我在第2点中谈到的对象相同。

    我希望这一切都有帮助!

答案 1 :(得分:0)

首先,您无需致电test1.A()。它不是一种方法,它是类A的公共构造函数。

如果您需要从另一个类获取private变量url,您可以创建方法:

public String getUrl() {
  return this.url;
}

并在课程B中获取,如下所示:

String url2 = test1.getUrl();