【发布时间】:2017-08-19 15:01:28
【问题描述】:
对于下面的页面对象示例类,我有一个 accountsLink 私有成员,它在加载时映射到登录页面上的非动态元素。在构造函数调用 initElements 方法时,使用 FindBy 注解对其进行初始化。
public class Login {
private WebDriver driver;
@FindBy(id = "account")
private WebElement accountsLink;
//constructor, elements are initialized by the PageFactory
public MainPage(WebDriver driver) {
this.driver = driver;
PageFactory.initElements(driver, this);
}
//clicking accounts opens a dynamic ajax menu which has a Sign In Button
public SignInPage clickAccountsLink() {
accountsLink.click();
WebElement signInButton = driver.findElement(By.id("signin"));
signInButton.click();
return new SignInPage(driver);
}
}
现在解决问题。我有另一个元素(signInButton),它仅在您单击 accountsLink 元素时才动态加载。此操作不会将您带到另一个页面,而只会显示一个 ajax 菜单,其中将显示登录按钮。
我的问题是,由于 signInButton 元素仅在单击 accountsLink 元素时出现,是否可以使用 FindBy 注释将其声明为 Login 类的成员,或者我是否必须坚持当前使用驱动程序的解决方案。 findElement(By.id("signin")) 在 clickAccountsLink 方法中?
我希望我的问题有意义。
【问题讨论】:
-
这是我完全避免使用
PageFactory的原因之一。您最终会混合使用带注释的元素并根据需要抓取页面。我更喜欢根据需要一直抓取页面以保持一致性和性能。 -
虽然在纯静态网页中是有意义的,但如今几乎没有任何网站被认为是静态的。所以你是对的。
标签: java selenium automated-tests