2013-11-15 14 views
9

Neyi başarmaya çalışıyorum bir sayfaya göz atmak, bir şeyleri yüklemek için beklemek ve daha sonra bir ekran görüntüsü almak ve kaydetmek.X saniye duraklatmak için Selenyum alınıyor

Zaten var kod

WebDriver driver = new FirefoxDriver(); 


driver.get("http://www.site.com"); 


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

try { 

    File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); 
    FileUtils.copyFile(scrFile, new File("/home/Desktop/image.png")); 

} catch (Exception e) { 

     e.printStackTrace(); 
} 

driver.close(); 

Hiç dolu olacak ancak sitede içerik Ben almak istiyorum çünkü yüklenen sayfası bile beklemek gerekir nedenidir Birkaç saniye sonra yüklerin resmi. Bazı sebeplerden dolayı sayfa beklemiyor, sürücü/sayfa almak için kullanabileceğim başka bir yöntem var mı?

+0

Bu gönderiyi kontrol edin: http://stackoverflow.com/questions/5868439/wait-for-page-load-in-selenium – Gayathri

cevap

6

İlk sayfa yüklendikten sonra yüklenen bir öğeyi bulabilir ve ardından bu öğe bulunana kadar Selenium'u bekleyebilirsiniz.

public void pause(Integer milliseconds){ 
    try { 
     TimeUnit.MILLISECONDS.sleep(milliseconds); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 
} 

source

:
WebDriverWait wait = new WebDriverWait(driver, 10); 
WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("ID"))); 
+1

Sadece bu yaklaşımda, ExpectedCondition, koşulun yerine getirilip getirilmediğini (burada "ID" elemanının görünür olduğu yerde) zaman aşımına kadar (burada 10'a ayarlanmış) görmek için her 500 ms'de bir test edildiğini belirtmek isterim. Özel yüklemler için kendi koşullarınızı da yazabilirsiniz. Buradaki belgeler şu adreste bulunabilir: http://www.seleniumhq.org/docs/04_webdriver_advanced.jsp – anotherdave

5

Bu gerçekten selenyuma özgü bir şey olmaz. Sadece java'nın sayfayı yükledikten sonra ekran görüntüsünü almadan önce biraz uyumasını istiyorsunuz. Driver.get ifadenizden sonra bunu koyun.

+2

sadece neden olmamak çünkü ** NEVER ** kullanmalısınız çünkü açık bu gibi bekler. kötü. – sircapsalot

+0

Eğer her testte ekran görüntüsünü 1.000 bir sette alıyorsa ve eleman normalde 500 ms sonra yüklenirse, bu yaklaşım yapım süresine bir saat ekleyecektir. – anotherdave

+0

@sircapsalot Tarayıcımın kapanmadan önce 2 saniye daha açık kalmasını istiyorsanız (Ben. Quit()), bunu nasıl yapmalıyım? – MStodd

1

Sadece birilerine yardım ederse, her zaman örtülü bekleyişlerden ve özellikle Thread#sleep'dan mümkün olduğunca fazla yararlanmaya çalışmalısınız. Thread.sleep(10) yaparsanız, kodunuz her zaman sayfanız 1 sn sonra hazır olsa bile 10 saniye bekleyin. Bu, sık sık kullanıyorsanız, testlerinizi büyük ölçüde yavaşlatabilir.

ExplicitWaits'u kullanmanın daha iyi bir yolu vardır; bu, bazı eylemler gerçekleştiği veya sayfada bazı öğeler oluşturulduğu sürece tam olarak bekleyeceğiniz anlamına gelir. Bu durumda, her şeyin yüklü olup olmadığını kontrol etmek ve bir ekran görüntüsü almak için açık beklemeyi kullanırdım.

+0

ExplicitWaits bağlantısı için teşekkür ederiz, gerçekten yardımcı oldu! :) –

0

saniyeler belirli sayıda geciktirmek için yerine en kısa sürede yanıt vermek istiyorsanız

, burada selenyum IDE sunmaktadır ne benzer bir duraklama bir fonksiyondur
İlgili konular