Java/Selenium 按 ID 查找元素 - Selenium 是否循环注释?

Java/Selenium Find Element by ID - Is Selenium looping over Annotations?

目前我正在开发一个相对较小的 GWT 应用程序,并且正在使用 Selenium 测试 GUI。一切正常,但在我编写测试时,一个问题突然出现在我的脑海中:

在我的 DummyPage 上,我执行以下操作:

public class DummyPage 
{

    @FindBy(id = ID_SEARCH_BTN)     
    private WebElement btnSearch;

    @FindBy(id = ID_CANCEL_BTN_CLEAR)   
    private WebElement btnClear;
    ...

    public DummyPage() 
    {
        eventFiringDriver = DriverFactory.getInstance().getEventFiringDriver();
        PageFactory.initElements(eventFiringDriver, this);
    }

    WebDriverWait webDriverWait = new WebDriverWait(eventFiringDriver, 20);
    wait = webDriverWait.ignoring(StaleElementReferenceException.class);
}

在我的应用程序中,如果用户单击某个按钮,则会显示一个自定义对话框,这个对话框是在按钮的 clickHandler 中构建的,所以它不存在于页面上?我通过自定义 DialogBox 上的按钮传递了一个 ID,以便在我的测试页上找到它。

我的问题是,如果我尝试通过以下方式在 DialogBox 上找到按钮:

@FindBy(id = DIALOGBOX_YES_BTN)
private WebElement dialogBoxYesBtn;

对象是否为空?或者 WebElement 在创建时是否被提取? Selenium 是否循环遍历 @FindBy 注释并尝试解析它们?

目前我有一个测试,我点击第一个按钮,然后用同样的方法尝试找到 DialogBoxButton 及其 ID - 它工作正常,但如果我可以将所有 WebElements 定位在顶部就更好了页面对象。

在此先感谢您的帮助。

Selenium 是否在注释上循环? 答案是肯定的,如果您正在对其执行某些操作,Selenium 会在预期的 WebElement 上循环。所以在你的情况下,如果你提到

@FindBy(id = DIALOGBOX_YES_BTN)
private WebElement dialogBoxYesBtn;

因此,当您尝试在脚本中的任何位置使用此网络元素时,例如

dialogBoxYesBtn.click();

驱动会先在当前页面找到它,然后模拟WebElement上的动作。如果明显找不到就会抛出异常

参考this blog了解更多。