2017-02-19 61 views
0

我浏览了该网站,但没有找到我正在查找的答案。如何将selenium webdriver实例传递给另一个类

  1. 超强碱接收机类在这里我只创建一个webdriver的
  2. Baseclass-在这个类的对象我延长超强碱类,调用驱动程序,并打开URL。
  3. Clicklink class-在这个类中,我再次扩展了Superbase类,但只是找到一个空指针异常。我想我得到了异常,因为驱动程序对象没有初始化。

我只是一个初学者,并没有尝试browserfactory和其他选项,因为我想从简单的流程开始。

超类

Public class Superclass 
    { 
public webdriver Driver; 
} 

基类

public class Baseclass extends Superclass 
{ 
setting capabilities and launching the browser 
} 

ClickLink

public class Clicklink extends Superclass 
{ 
here I want to click on a link 
driver.findelement(by.xpath("xpath").click()); 
// after this statement I get a null pointer exception 
} 

能否请您指导我在这里?我怎么能达到同样的。

非常感谢!

+1

显示你的方法吧。 –

+1

是在“@ Before *”方法中还是在构造函数中“设置功能并启动浏览器”? –

+0

可能是通过在孩子中创建一个超类的对象,然后通过它来调用它。 Superclass sl = new Superclass(); sl.driver.findelement(by.xpath(“xpath”)。点击()); – kushal

回答

0

这是从我身边完成的大量猜测,但请确保您的超类实际设置了驱动程序并将其返回。实际上,你可以让它在这两种方法:

public class Superclass 
{ 
    public WebDriver driver; 
    public Superclass(){ 
    driver = new FirefoxDriver(); 
    } 
    public WebDriver getdriver(){ 
    if (driver == null){ 
     driver = new FirefoxDriver(); 
     return driver; 
    }else{ 
     return driver; 
    } 
    } 
} 

后来在方法调用它通过:

public class Clicklink extends Superclass 
{ 

getdriver().findelement(by.xpath("xpath").click()); 

} 
+0

谢谢@Pavel,这有助于 – Ashwin

0

不要使用编码语言来命名类; SuperClass和BaseClass是很差的名字。应该用问题的语言来命名。在这种情况下,网站应用程序测试,甚至更好的LoginPage,CartPage,ProfilePage等。使用Page Object Pattern。使用BrowserFactory提供的webdriver

public abstract class PageObject { 
    public WebDriver driver; 
    PageObject() { 
     // Page can initialise its self 
     this.driver = BrowserFactory.webDriver(); 
    } 
    PageObject(final WebDriver webDriver) { 
     this.driver = webDriver; 
     } 
    } 
0

的情况下,如果你不希望通过驱动程序实例到页面对象的构造函数,你可以创建一个驱动程序的一些容器类和测试之前把它和运行之后将其删除。例如:

class Driver { 
    public static ThreadLocal<IWebDriver> driverInstance = new ThreadLocal<IWebDriver>(); 

    public static IWebDriver GetDriver() { 
     return driverInstance.Value; 
    } 

    public static void SetDriver(IWebDriver driver) { 
     driverInstance.Value = driver; 
    } 
} 

,使这个容器字段ThreadLocal,以避免与并行运行的问题。

0
I did use below code in utility class like below 
    public static WebDriver setup(WebDriver driver) 
    { 
     if(driver == null) { 
      driver = new FirefoxDriver(); 
      driver.manage().window().maximize(); 
      driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 
      return driver; 
     }else 
      return driver; 

     //System.out.println("in method "+ driver.getTitle()); 

    } 
+0

公共课Ebay WebDriver驱动程序= null; @Test public void testlogic() { driver = Container.setup(driver); driver.get(“https://www.ebay.co.uk”); } – dev

+1

你真的需要编辑这个。 – klutt

相关问题