2016-04-07 28 views
0

Temel olarak, her basıldığında, yeni bir metin alanı oluşturan bir düğme içeren bir web sayfasını otomatikleştiriyorum. Metin alanları listesini bulmak için PageFactory ile FindBy açıklamasını kullanıyorum.Selenium WebDriver ile elemanların beklenmesi

Düğmeye birkaç kez bastığımda, birkaç metin alanı oluşturduğumda ve bunlardan birine yazmayı denediğimde bir senkronizasyon sorunum var. Hata ayıklayıcıya adım atmak iyi çalışıyor, ancak hata ayıklayıcısında FindBy'nin tüm metin alanlarını bulması için bir gecikme var. Geçerli geçici çözümüm gereken sayıda metin alanı bulunana kadar uykuyu gerçekleştirir ancak bu oldukça yetersiz buluyorum. Senkronizasyonun nasıl en iyi şekilde yapılabileceği hakkında herhangi bir öneriniz var mı?

@FindBy(how= How.XPATH, using="//*[contains(@id, 'TextField')]") 
private List<WebElement> textFields; 
: 
: 
public void enterText(Integer index, String text){ 
    int attempts = 0; 
    // Check every 10th of a second for 10 seconds if all the textFields have been found 
    while ((textFields.size() <= index) && attempts < 100){ 
     Thread.sleep(100); 
    } 

    textFields.get(index).sendKeys("blah blah"); 

} 
+2

bu http://www.obeythetestinggoat.com/how-to-get-selenium-to-wait-for-page-load-after-a-click.html bakın – dnit13

cevap

1

Her şeyden önce Implicit, komut dosyasında bulunan tüm öğeleri bekler. Bu bekleme

driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); 

Şimdi kodunun altına kullanabileceğiniz ek zamana ihtiyacımız belli bir elemanın hemen sonra get.("URL");

yukarıda başlatma komut tüm eleman hediyesi beklemek: -

WebDriverWait wait = new WebDriverWait(driver, 10); 
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id("someid"))); 

Aşağıya bakınız: -

http://toolsqa.com/selenium-webdriver/wait-commands/

Size yardımcı olacağına inanıyorum :)