javascript - 如何在 java selenium 中使用 PageObjects 和 @FindBy 执行 javascript 元素
问题描述
我正在创建页面对象以在站点中导航并重构散列在一起的 Java 项目。我有一段代码调用了一个 JavaScript 按钮。但是,我无法弄清楚如何将其设置为在页面对象格式中使用@FindBy
当前页面对象是:
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);
}}
我无法进入的部分是:
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);
如果我将它放在测试脚本中但无法弄清楚如何将其转换为页面对象版本,则此方法有效。
解决方案
在构造函数中初始化 Javascript Executor
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);
}
}
推荐阅读
- arrays - 难以使用 C 从文件中的多维数组中提取数组元素
- shell - 如果找到某些文本,则打印两个图案之间的线条并忽略线条
- objective-c - CNContactPickerViewController 联系人列表偏移问题
- python - 运算符如何处理python中的不同类型
- python - 如何根据Python中文件名的位置解压缩和重命名文件
- math - 复概率或机会图形
- javascript - contentEditable 文本被反转
- javascript - 如何让用户在Javascript中只输入他的名字作为字符串?
- javascript - 使用 NestJS 编写 CLI
- docker - Dockerfile - 缓存包以更快地重建?