2015-12-02 38 views
1

如果按鈕不存在,則測試將掛起的時間超過5秒。等待HtmlElements

方法findElement()DefaultElementLocator被調用〜63次!

塊的嵌套越深,等待時間越長。

是否可以在htmlElements中以這種方式使用塊? 我在做什麼錯?

@Test 
public void myTestFunc() { 
    WebElement element = myPage.getMyForm() 
           .getSubForm() 
           .getButton() 
           .getWrappedElement(); 
    try { 
     (new WebDriverWait(driver, 5)) 
      .until(ExpectedConditions.visibilityOf(element)); 
    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 
} 
public class MyPage { 
    @FindBy(className = "...") 
    private MyForm myForm; 

    public MyPage(WebDriver driver){ 
     PageFactory.initElements(new HtmlElementDecorator(driver), this); 
    } 

    public MyForm getMyForm() { 
     return myForm; 
    } 
} 
public class MyForm extends HtmlElement { 
    @FindBy(className = "...") 
    private MySubForm mySubForm; 

    public MySubForm getMySubForm() { 
     return mySubForm; 
    } 
} 
public class MySubForm extends HtmlElement { 
    @FindBy(className = "...") 
    private MyButtonWrap button; 

    public MyButtonWrap getButton() { 
     return button; 
    } 
} 
public class MyButtonWrap extends Button { 
    public MyButtonWrap(WebElement wrappedElement) { 
     super(wrappedElement); 
    } 
    // ... 
} 
+0

我沒有看到60的使用在你的代碼的任何地方...... –

+0

很奇怪...... 確定。我再次發射了25秒。 但它太多了,導致WebDriverWait將不得不拋出TimeoutExeption。 (按鈕不存在) 我知道在HtmlElements中AjaxElementlocator的默認等待時間爲5秒,但是這個函數會暫停25秒。 並且嵌套的嵌套越深,等待時間越長( –

+0

隱含等待= 0 –

回答

0

我認爲這個問題與默認值爲5秒的隱式等待有關。有關更多詳細信息,請參閱this issue

我認爲正在發生的事情是,當你嘗試獲得wrappedElement:

myPage.getMyForm().getSubForm().getButton().getWrappedElement(); 

它隱含等待5秒爲每個@FindBy

嘗試把打印語句,看到其中的時間被消耗,例如:

public void myTestFunc() { 
    System.out.println("start"); 
    element = myPage.getMyForm().getSubForm().getButton().getWrappedElement(); 
    System.out.println("got element"); 
    try { 
     (new WebDriverWait(driver, 5)).until(visibilityOf(element)); 
     System.out.println("Finished waiting successfully"); 
    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 
}