如何从java中的另一个类调用方法webdriver?

时间:2017-11-24 22:31:55

标签: java selenium

我有一个类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个按钮可以点击。  谢谢

2 个答案:

答案 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 - 尽可能避免在测试中使用。 :)