我有一个类Test1,我使用这一行点击一个按钮:
try{
driver.findElement (By.xpath(Component._emp)).click();
System.out.println("Employment is clicked");
} catch (NoSuchElementException e17) {
System.out.println("Employment is not found [TEST FAILED]");
}
另一个名为Util的类,在这个类中我复制了上面的代码:
public static void click_person_employment(){
try{
driver.findElement (By.xpath(Component._emp)).click();
System.out.println("Employment is clicked");
} catch (NoSuchElementException e17) {
System.out.println("Employment is not found [TEST FAILED]");
}
}
所以在我的类Test1中,当我这样调用时: Util.click_person_employment()
抛出java.lang.Nullpointer异常
Whta是调用此方法的正确方法。 我的目标是减少我的类Test1中的代码,因为我有超过100个按钮可以点击。 谢谢
答案 0 :(得分:1)
要实现目标,您可以按照以下方式:
首先从 Util 类方法返回WebElement
-
public static WebElement click_person_employment(String empPath){
WebElement elem = null;
try{
elem = driver.findElement(By.xpath(empPath));
//System.out.println("Employment is clicked");
} catch (NoSuchElementException e17) {
System.out.println("Employment is not found [TEST FAILED]");
}
return elem;
}
然后从 Test1 类调用此方法,如
String empXpathStr = Component._emp;
WebElement element = Util.click_person_employment(empXpathStr);
element.click();
//Use WebDriverWait wait functionality here [Wait until element is visible]
您还可以尝试删除static
关键字并在 Test1 类中创建 Util 类的实例。最后使用实例对象从 Test1 类调用该方法。
答案 1 :(得分:1)
我建议您在Utils类中创建更多通用方法,这些方法可以反复使用。
此外,代码中不建议使用System.out.println。相反,您可以使用日志框架 - SLF4J是一个很好的。如果您坚持使用System.out.println,也可以传递消息。
所以我做了类似的事情:
<subsystem xmlns="urn:jboss:domain:ejb3:5.0">
<enable-graceful-txn-shutdown value="true"/>
然后在测试中将其称为:
private static final Logger LOGGER = Logger.getLogger([className].class.getName());
public static void clickOnElement(By by){
try {
WebElement element = driver.findElement(by).click();
} catch (NoSuchElementException e) {
LOGGER.log(Level.WARNING, e.getMessage(), e);
}
}
如果您希望在找不到按钮时测试失败,您可以在catch块中重新抛出异常。
PS。另外,显式等待总是优先于Thread.sleep - 尽可能避免在测试中使用。 :)