我得到了如何在 selenium 中以正常方式使用 WebDriverEventListener 的代码。 但不知道如何将其用于 PageFactory 模式。
代码如下,首先需要实现WebDriverEventListner接口(interface)
public class EventHandler implements WebDriverEventListener{
private Log log = LogFactory.getLog(this.getClass());
public void afterChangeValueOf(WebElement arg0, WebDriver arg1) {
// TODO Auto-generated method stub
log.info("inside method afterChangeValueOf on " + arg0.toString());
log.info("inside method afterChangeValueOf on " + arg0.toString());
}
public void afterClickOn(WebElement arg0, WebDriver arg1) {
// TODO Auto-generated method stub
log.info("inside method afterClickOn on " + arg0.toString());
}
public void afterFindBy(By arg0, WebElement arg1, WebDriver arg2) {
// TODO Auto-generated method stub
log.info("Find happened on " + arg1.toString()
+ " Using method " + arg0.toString());
}
public void afterNavigateBack(WebDriver arg0) {
// TODO Auto-generated method stub
log.info("Inside the after navigateback to " + arg0.getCurrentUrl());
}
public void afterNavigateForward(WebDriver arg0) {
// TODO Auto-generated method stub
log.info("Inside the afterNavigateForward to " + arg0.getCurrentUrl());
}
public void afterNavigateTo(String arg0, WebDriver arg1) {
// TODO Auto-generated method stub
log.info("Inside the afterNavigateTo to " + arg0);
}
public void afterScript(String arg0, WebDriver arg1) {
// TODO Auto-generated method stub
log.info("Inside the afterScript to, Script is " + arg0);
}
public void beforeChangeValueOf(WebElement arg0, WebDriver arg1) {
// TODO Auto-generated method stub
log.info("Inside the beforeChangeValueOf method");
}
public void beforeClickOn(WebElement arg0, WebDriver arg1) {
// TODO Auto-generated method stub
log.info("About to click on the " + arg0.toString());
}
public void beforeFindBy(By arg0, WebElement arg1, WebDriver arg2) {
// TODO Auto-generated method stub
log.info("Just before finding element " + arg1.toString());
}
public void beforeNavigateBack(WebDriver arg0) {
// TODO Auto-generated method stub
log.info("Just before beforeNavigateBack " + arg0.getCurrentUrl());
}
public void beforeNavigateForward(WebDriver arg0) {
// TODO Auto-generated method stub
log.info("Just before beforeNavigateForward " + arg0.getCurrentUrl());
}
public void beforeNavigateTo(String arg0, WebDriver arg1) {
// TODO Auto-generated method stub
log.info("Just before beforeNavigateTo " + arg0);
}
public void beforeScript(String arg0, WebDriver arg1) {
// TODO Auto-generated method stub
log.info("Just before beforeScript " + arg0);
}
public void onException(Throwable arg0, WebDriver arg1) {
log.info("Exception occured at " + arg0.getMessage());
}
public void afterNavigateRefresh(WebDriver arg0) {
// TODO Auto-generated method stub
}
public void beforeNavigateRefresh(WebDriver arg0) {
// TODO Auto-generated method stub
}
}
接下来我们需要在脚本中使用它,如下所示:
@BeforeClass()
public void signIn() throws Exception
{
BasicConfigurator.configure();
PropertyConfigurator.configure(PROPERTIES_FILEPATH);
log = Logger.getLogger("SuperTest");
//Delete the test-output directory
try
{
FileUtils.deleteDirectory(new File("./test-output"));
}
catch(Exception e)
{
}
//Get the Browser Type and initiate the Driver
driver = GenericUtilLibrary.initializeBrowser(driver, BROWSER_TYPE);
driver.manage().deleteAllCookies();
driver.manage().timeouts().implicitlyWait(40, TimeUnit.SECONDS);
driver.manage().window().maximize();
//create a object for EventFiringWebDriver Class
eventDriver = new EventFiringWebDriver(driver);
//create object of the class (EventHandler) which implemented WebDriverEventListener Interface.
handler = new EventHandler();
//register handler object with EventFiringWebDriver
eventDriver.register(handler);
eventDriver.get(URL);
//CLICK ON SIGNIN BUTTON IN LOGIN PAGE.
LoginPage lpage = new LoginPage(driver);
lpage.clickSignInButton();
//ENTER USER CREDENTIALS AND CLICK ON SIGNON BUTTON IN SIGNIN PAGE.
SignInPage spage = new SignInPage(driver);
spage.clickSignInButton(USERNAME, PASSWORD);
}
注册后,当我们对所有 WebElement 使用 eventDriver 时,eventDriver 将处理 WebDriver 操作的日志记录。
直到 eventDriver.get(URL);我没有问题,但是当谈到下一步时,我将调用对象页面类并调用它们的方法。要发送 eventDriver 而不是驱动程序对象,当它调用第一个方法本身时,我得到 NULLPOINTEREXCEPTION。
我不知道如何使用 WebDriverEventListener。
请任何人帮助我解决这个问题。
最佳答案
在您的代码中,您有一个简单的错误。
而不是:
//CLICK ON SIGNIN BUTTON IN LOGIN PAGE.
LoginPage lpage = new LoginPage(driver);
lpage.clickSignInButton();
您应该使用:
//CLICK ON SIGNIN BUTTON IN LOGIN PAGE.
LoginPage lpage = new LoginPage(handler);
lpage.clickSignInButton();
关于java - 如何在页面工厂模式中使用WebDriver事件监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38822932/