2017-08-09 93 views
2

目前我正在开发一个相对较小的GWT应用程序,我正在用Selenium测试GUI。一切工作正常,但是当我在写我的测试问题在我脑海中突然出现了:Java/Selenium按ID查找元素 - Selenium是否循环注释?

在我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); 
} 

在在用户点击了我的应用程序上的按钮自定义对话框被显示,这个DialogBox是建立在按钮的clickHandler,所以它不存在于页面上?我在我的自定义DialogBox上传递了一个ID以在我的测试页上找到它。

我的问题是,如果我试图找到由对话框按钮:

@FindBy(id = DIALOGBOX_YES_BTN) 
private WebElement dialogBoxYesBtn; 

将对象为null,或将WebElement被其创建时获取的? Selenium是否通过@FindBy注释循环并尝试解决它们?

目前,我有一个测试,我点击第一个按钮,然后在同一个方法中,我尝试用它的ID找到DialogBoxButton - 它的工作,但是如果我可以在所有WebElements页面对象。

在此先感谢您的帮助。

+2

是的,你可以将它添加到页面对象。除非使用缓存注释,否则每次对其执行操作时都会获取该对象。 – Murthi

+0

IMO,从(在)PageObject中初始化一个'PageObject'的想法可能不是一个好主意。根据你的问题,如果'用户点击一个按钮,一个自定义对话框被显示出来'本质上意味着'自定义对话框'是'HTML DOM'的一部分,我们应该能够从同一个'PageObject'中处理它。 – DebanjanB

回答

1

Selenium是否在循环注释?答案是肯定的,如果你正在执行一些操作,Selenium会遍历预期的WebElement。所以你的情况,如果你所提到的一样

@FindBy(id = DIALOGBOX_YES_BTN) 
private WebElement dialogBoxYesBtn; 

所以,当您尝试使用此webelement无论在脚本中像

dialogBoxYesBtn.click(); 

司机会先找到它在当前页上,然后模拟在WebElement上采取行动。如果没有发现,它会抛出异常。

请参阅this blog了解更多信息。