Issue
I am creating page objects for navigating through a site and refactoring hashed together Java project. I have a piece of code which invokes a JavaScript button. However, I can't work out how to set this up to be used in page object format with @FindBy
Current page object is:
public CustomerLogin(WebDriver driver) {
PageFactory.initElements(driver, this);
}
@FindBy(how = How.ID, using = "username")
private WebElement userName;
@FindBy(how = How.ID, using = "password")
private WebElement password;
@FindBy(how = How.XPATH, using = "//*[@id=\\\"loginPage\\\"]/div[2]/div/div/div[1]/form/div[3]/div/input[1]")
private WebElement login;
public void logIn(String userName, String password) {
this.userName.sendKeys(userName);
this.password.sendKeys(password);
}}
The part that I can't get in is:
WebElement element = webDriver.findElement(By.xpath("//*@id=\"loginPage\"]/div[2]/div/div/div[1]/form/div[3]/div/input[1]"));
JavascriptExecutor executor = (JavascriptExecutor) webDriver;
executor.executeScript("arguments[0].click();", element);
This works if I put it in the test script but can't work out how to convert that into a page object version.
Solution
Initialize the Javascript Executor in the constructor
public class CustomerLogin{
WebDriver driver;
JavascriptExecutor executor;
public CustomerLogin(WebDriver driver) {
this.driver = driver;
this.executor = (JavascriptExecutor) this.driver;
PageFactory.initElements(driver, this);
}
@FindBy(xpath = "//*@id=\"loginPage\"]/div[2]/div/div/div[1]/form/div[3]/div/input[1]")
private WebElement loginButton
//method, for clicking loginButton with JS Executor
public void clickLoginButton() {
executor.executeScript("arguments[0].click();", loginButton);
}
}
Answered By - IMParasharG
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.