Selenium:使用正确的url启动浏览器后,方法无法执行。

时间:2015-11-14 07:40:09

标签: java selenium testng

我的情景是: 包A有 X级 Y级

Class X打开一个驱动程序和url,因此创建了一个opendriver()方法并将注释设置为@BeforeTest。

在Y类中,我创建了一个单击登录链接并将注释设置为@Test

的方法

所以,一旦我通过testng.xml运行包,然后使用正确的url启动浏览器,但是在执行clickon登录链接方法时我得到NullPointer Exception。

我的问题是:我如何处理上述情况?一旦打开网址,如何执行clickon登录方法

1 个答案:

答案 0 :(得分:0)

如果@BeforeTest标记中的testng.xml中添加了相应的类以及带有<test><classes><class>注释的TestClass,则会执行注释为@Test注释的Methond。 / p>

示例:

public class TestNG1 {
    @BeforeTest
    public void init() {
        System.out.println("Initialized");
    }
}

public class TestNG2 {
    @Test
    public void doSomeThing() {
        System.out.println("Test method");
    }
}

然后testng.xml应该

<?xml version="1.0" encoding="UTF-8"?>
<suite name="Suite" parallel="false">
  <test name="Test">
    <classes>
      <class name="com.sample.TestNG1"/>
       <class name="com.sample.TestNG2"/>
    </classes>
  </test> <!-- Test -->
</suite> <!-- Suite -->

因此,请确保在初始化webdriver的testng.xml中添加了该类。

编辑以更直接地解决手头的问题。

初始化webdriver的基类

public class BaseTest {

    private static final String HOMEPAGE = "http://www.google.com";
    private static final String HOMEPAGE_TITLE = "Google";

    protected static WebDriverWait wait;
    protected static WebDriver driver;

    @BeforeTest
    public void setUp() {
        driver = new FirefoxDriver();
        wait = new WebDriverWait(driver, 60);
    }

    @Test
    public void openGoogle() {
        driver.get(HOMEPAGE);
        wait.until(ExpectedConditions.titleContains(HOMEPAGE_TITLE));

        final String windowTitle = driver.getTitle();
        System.out.println(windowTitle);
    }

    @AfterTest
    public void tearDown() {
        driver.quit();
    }

}

使用预初始化驱动程序的从属类。

public class SearchTest extends BaseTest {

    private static final String SEARCH_BTN_NAME = "btnG";
    private static final String SEARCH_BOX_ID = "lst-ib";

    @Test(testName = "search", dependsOnMethods="openGoogle")
    public void search() {
        driver.findElement(By.id(SEARCH_BOX_ID)).sendKeys("Sharath Bhaskara");
        driver.findElement(By.name(SEARCH_BTN_NAME)).click();
    }

}

运行完整测试套件的testng.xml。

<?xml version="1.0" encoding="UTF-8"?>
<suite name="Suite" parallel="false">
  <test name="WebdriverTest">
    <classes>
      <class name="com.sample.project.BaseTest"/>
       <class name="com.sample.project.SearchTest"/>
    </classes>
  </test> <!-- Test -->
</suite> <!-- Suite -->

注意: BaseTest中的WebDriver实例标记为protected static,因为默认情况下不会保存实例变量的状态。