我的情景是: 包A有 X级 Y级
Class X打开一个驱动程序和url,因此创建了一个opendriver()方法并将注释设置为@BeforeTest。
在Y类中,我创建了一个单击登录链接并将注释设置为@Test
的方法所以,一旦我通过testng.xml运行包,然后使用正确的url启动浏览器,但是在执行clickon登录链接方法时我得到NullPointer Exception。
我的问题是:我如何处理上述情况?一旦打开网址,如何执行clickon登录方法
答案 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
,因为默认情况下不会保存实例变量的状态。