Selenium'da "Waits" testlerin yürütülmesinde önemli bir rol oynar. Bu eğitimde, Selenium'da hem "Örtülü" hem de "Açık" beklemelerin çeşitli yönlerini öğreneceksiniz.
Bu eğitimde şunları öğreneceksiniz:
- Selenium'da Neden Beklemeye İhtiyacımız Var?
- Örtülü Bekleme
- Açık Bekle
- Akıcı Bekle
Selenium'da Neden Beklemeye İhtiyacımız Var?
Web uygulamalarının çoğu Ajax ve Javascript kullanılarak geliştirilmiştir. Bir sayfa tarayıcı tarafından yüklendiğinde, etkileşim kurmak istediğimiz öğeler farklı zaman aralıklarında yüklenebilir.
Bunu sadece elemanın tanımlanmasını zorlaştırmakla kalmaz, aynı zamanda eleman bulunmazsa bir " ElementNotVisibleException " istisnası atar . Selenium Waits'i kullanarak bu sorunu çözebiliriz.
Testimizde hem örtük hem de açık beklemeleri kullanmamız gereken bir senaryo düşünelim. Örtülü bekleme süresinin 20 saniye ve açık bekleme süresinin 10 saniye olarak ayarlandığını varsayalım.
Bazı "Beklenen Koşullar " (Açık Bekleme) içeren bir öğe bulmaya çalıştığımızı varsayalım , öğe Açık bekleme (10 Saniye) tarafından tanımlanan zaman çerçevesi içinde yer almıyorsa, örtük bekleme ile tanımlanan zaman çerçevesini kullanacaktır ( 20 saniye) bir " ElementNotVisibleException " oluşturmadan önce .
Selenium Web Sürücüsü Bekler
- Örtülü Bekleme
- Açık Bekle
Selenyumda Örtülü Bekleme
Selenyum zımnen bekleyin bir "yok böyle Eleman İstisna" atar önce zaman belirli bir miktar beklemek web sürücü söylemek için kullanılır. Varsayılan ayar 0'dır. Saati belirledikten sonra, web sürücüsü bir istisna atmadan önce öğenin o süreyi bekleyecektir.
Selenium Web Driver, Watir'den örtük bekleme fikrini ödünç aldı.
Aşağıdaki örnekte, 10 saniyelik zaman çerçevesi ile örtük bir bekleme ilan ettik. Bu, öğenin bu zaman dilimi içinde web sayfasında bulunmaması durumunda bir istisna atacağı anlamına gelir.
Örtülü beklemeyi bildirmek için:
Sözdizimi :
driver.manage (). timeout (). örtük olarak Bekleme (TimeOut, TimeUnit.SECONDS);
paket guru.test99;içe aktar java.util.concurrent.TimeUnit;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.chrome.ChromeDriver;import org.testng.annotations.Test;public class AppTest {korumalı WebDriver sürücüsü;@Ölçekpublic void guru99tutorials () InterruptedException'ı atar{System.setProperty ("webdriver.chrome.driver", ". \\ chromedriver.exe");sürücü = yeni ChromeDriver ();driver.manage (). timeout (). örtük olarak Bekleme (10, TimeUnit.SECONDS);String eTitle = "Demo Guru99 Sayfası";String aTitle = "";// Chrome'u başlatın ve Temel URL'ye yeniden yönlendirindriver.get ("http://demo.guru99.com/test/guru99home/");// Tarayıcı penceresini büyütürdriver.manage (). window (). maximize ();// başlığın gerçek değerini alaTitle = driver.getTitle ();// asıl başlığı beklenen başlıkla karşılaştırıneğer (aTitle.equals (eTitle)){System.out.println ("Test Başarılı");}Başka {System.out.println ("Test Başarısız");}// tarayıcıyı kapatdriver.close ();}}
Kod Açıklaması
Yukarıdaki örnekte,
Aşağıdaki Kodu Düşünün:
driver.manage (). timeout (). örtük olarak Bekleme (10, TimeUnit.SECONDS);
Örtük bekleme 2 parametre kabul eder, ilk parametre zamanı bir tamsayı olarak kabul eder ve ikinci parametre saniye, DAKİKA, MİLİSANİYE, MİKROSANİYE, NANOSECONDS, GÜN, SAAT vb. Cinsinden zaman ölçümünü kabul eder.
Selenyumda Açık Bekleme
Selenyum Yönelik Doğrudan bekleyin "ElementNotVisibleException" istisna atmadan önce aşıldı belirli koşullar (Beklenen Koşullar) veya maksimum süre beklemek Web Sürücü anlatmak için kullanılır. Akıllı bir beklemedir, ancak yalnızca belirli öğeler için uygulanabilir. Dinamik olarak yüklenen Ajax öğelerini beklerken örtük beklemeden daha iyi seçenekler sunar.
Açıkça beklemeyi ilan ettiğimizde, " ExpectedConditions " u kullanmalıyız veya Fluent Wait kullanarak durumu ne sıklıkla kontrol etmek istediğimizi yapılandırabiliriz . Bu günlerde, Thread.Sleep () kullanıyoruz genellikle kullanılması tavsiye edilmez.
Aşağıdaki örnekte, " WebDriverWait " sınıfı için referans bekleme oluşturuyoruz ve " WebDriver " referansını kullanarak örnek oluşturuyoruz ve maksimum 20 saniyelik bir zaman çerçevesi veriyoruz.
Sözdizimi:
WebDriverWait wait = new WebDriverWait (WebDriverRefrence, TimeOut);
paket guru.test99;içe aktar java.util.concurrent.TimeUnit;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;import org.openqa.selenium.support.ui.ExpectedConditions;import org.openqa.selenium.support.ui.WebDriverWait;import org.testng.annotations.Test;public class AppTest2 {korumalı WebDriver sürücüsü;@Ölçekpublic void guru99tutorials () InterruptedException'ı atar{System.setProperty ("webdriver.chrome.driver", ". \\ chromedriver.exe");sürücü = yeni ChromeDriver ();WebDriverWait wait = new WebDriverWait (sürücü, 20);String eTitle = "Demo Guru99 Sayfası";String aTitle = "";// Chrome'u başlatın ve Temel URL'ye yeniden yönlendirindriver.get ("http://demo.guru99.com/test/guru99home/");// Tarayıcı penceresini büyütürdriver.manage (). window (). maximize ();// başlığın gerçek değerini alaTitle = driver.getTitle ();// asıl başlığı beklenen başlıkla karşılaştırıneğer (aTitle.contentEquals (eTitle)){System.out.println ("Test Başarılı");}Başka {System.out.println ("Test Başarısız");}WebElement guru99seleniumlink;guru99seleniumlink = wait.until (ExpectedConditions.visibilityOfElementLocated (By.xpath ("/ html / body / div [1] / section / div [2] / div / div [1] / div / div [1] / div / div / div / div [2] / div [2] / div / div / div / div / div [1] / div / div / a / i ")));guru99seleniumlink.click ();}}
Kod Açıklaması
Aşağıdaki Kodu Düşünün:
WebElement guru99seleniumlink;guru99seleniumlink = wait.until (ExpectedConditions.visibilityOfElementLocated (By.xpath ("/ html / body / div [1] / section / div [2] / div / div [1] / div / div [1] / div / div / div / div [2] / div [2] / div / div / div / div / div [1] / div / div / a / i ")));guru99seleniumlink.click ();
Bu WebDriver bekleme örneğinde, hangisi önce gelirse , " WebDriverWait " sınıfında veya " ExpectedConditions " ta tanımlanan sürenin gerçekleşmesini bekleyin .
Yukarıdaki Java kodu , " ExpectedConditions " karşılanıncaya ve koşulun " visibilityofElementLocated " olana kadar web sayfasında " WebDriverWait " sınıfında tanımlanan 20 saniyelik bir zaman çerçevesi için bir öğeyi beklediğimizi belirtir .
Selenium Explicit Wait'te kullanılabilecek Beklenen Koşullar aşağıdadır
- alertIsPresent ()
- elementSelectionStateToBe ()
- elementToBeClickable ()
- elementToBeSelected ()
- frameToBeAvaliableAndSwitchToIt ()
- invisibilityOfTheElementLocated ()
- invisibilityOfElementWithText ()
- entityOfAllElementsLocatedBy ()
- entityOfElementLocated ()
- textToBePresentInElement ()
- textToBePresentInElementLocated ()
- textToBePresentInElementValue ()
- titleIs ()
- titleContains ()
- visibilityOf ()
- visibilityOfAllElements ()
- visibilityOfAllElementsLocatedBy ()
- visibilityOfElementLocated ()
Selenyumda Akıcı Bekleme
Selenyum Akıcı bekleyin web sürücü biz "ElementNotVisibleException" istisna atmadan önce durumunu kontrol etmek istediğiniz sıklıkta yanı sıra, bir durum için beklenecek maksimum süreyi tanımlamak için kullanılır. Nesne bulunana veya zaman aşımı gerçekleşene kadar düzenli aralıklarla web öğesini kontrol eder.
Sıklık: Düzenli zaman aralığında durumu doğrulamak / kontrol etmek için zaman çerçevesi ile bir tekrar döngüsü ayarlama
Bir elemanın farklı zaman aralıklarında yüklendiği bir senaryo düşünelim. Öğe 10 saniye, 20 saniye veya daha uzun bir süre içinde yüklenebilir, 20 saniyelik açık bir bekleme bildirirsek. Bir istisna atmadan önce belirtilen süreye kadar bekleyecektir. Bu tür senaryolarda, akıcı bekleme, öğeyi bulana kadar veya son zamanlayıcı bitene kadar farklı frekansta bulmaya çalışacağından, kullanmak için ideal beklemedir.
Sözdizimi:
Bekle bekleyin = yeni FluentWait (WebDriver referansı).withTimeout (zaman aşımı, SANİYE).pollingEvery (zaman aşımı, SECONDS).ignoring (Exception.class);
Yukarıdaki kod, Selenium v3.11 ve sonraki sürümlerde kullanımdan kaldırılmıştır. Kullanmanız gerekir
Bekle bekleyin = yeni FluentWait (WebDriver referansı).withTimeout (Duration.ofSeconds (SECONDS)).pollingEvery (Duration.ofSeconds (SECONDS)).ignoring (Exception.class);
paket guru.test99;import org.testng.annotations.Test;import java.util.NoSuchElementException;içe aktar java.util.concurrent.TimeUnit;içe aktarma java.util.function.Function;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;import org.openqa.selenium.support.ui.ExpectedConditions;import org.openqa.selenium.support.ui.FluentWait;import org.openqa.selenium.support.ui.Wait;import org.openqa.selenium.support.ui.WebDriverWait;import org.testng.annotations.Test;public class AppTest3 {korumalı WebDriver sürücüsü;@Ölçekpublic void guru99tutorials () InterruptedException'ı atar{System.setProperty ("webdriver.chrome.driver", ". \\ chromedriver.exe");String eTitle = "Demo Guru99 Sayfası";String aTitle = "";sürücü = yeni ChromeDriver ();// Chrome'u başlatın ve Temel URL'ye yeniden yönlendirindriver.get ("http://demo.guru99.com/test/guru99home/");// Tarayıcı penceresini büyütürdriver.manage (). window (). maximize ();// başlığın gerçek değerini alaTitle = driver.getTitle ();// asıl başlığı beklenen başlıkla karşılaştırıneğer (aTitle.contentEquals (eTitle)){System.out.println ("Test Başarılı");}Başka {System.out.println ("Test Başarısız");}bekleyin = yeni FluentWait (sürücü).withTimeout (30, TimeUnit.SECONDS).pollingEvery (5, TimeUnit.SECONDS).ignoring (NoSuchElementException.class);WebElement clickseleniumlink = wait.until (yeni İşlev () {genel WebElement başvurusu (WebDriver sürücüsü) {return driver.findElement (By.xpath ("/ html / body / div [1] / section / div [2] / div / div [1] / div / div [1] / div / div / div / div [2 ] / div [2] / div / div / div / div / div [1] / div / div / a / i "));}});// selenyum bağlantısına tıklayınclickseleniumlink.click ();// tarayıcıyı kapatdriver.close ();}}
Kod Açıklaması
Aşağıdaki Kodu Düşünün:
bekleyin = yeni FluentWait (sürücü).withTimeout (30, TimeUnit.SECONDS).pollingEvery (5, TimeUnit.SECONDS).ignoring (NoSuchElementException.class);
Yukarıdaki örnekte, " NoSuchElementException " göz ardı edilerek 30 saniyelik zaman aşımı ve frekans 5 saniyeye ayarlanan akıcı bir bekleme ilan ediyoruz.
Aşağıdaki Kodu Düşünün:
genel WebElement başvurusu (WebDriver sürücüsü) {return driver.findElement (By.xpath ("/ html / body / div [1] / section / div [2] / div / div [1] / div / div [1] / div / div / div / div [2 ] / div [2] / div / div / div / div / div [1] / div / div / a / i "));
Sayfadaki Web Öğesini tanımlamak için yeni bir işlev oluşturduk. (Örn: Burada Web Elementi, web sayfasındaki Selenium bağlantısından başka bir şey değildir).
Frekans 5 saniyeye ayarlanmıştır ve maksimum süre 30 saniyeye ayarlanmıştır. Bu, web sayfasındaki öğeyi maksimum 30 saniye süreyle her 5 saniyede bir kontrol edeceği anlamına gelir. Öğe bu zaman çerçevesi içinde yer alıyorsa , işlemleri gerçekleştirecek, aksi takdirde bir " ElementNotVisibleException " oluşturacaktır
Örtülü Bekleme ile Açık Bekleme Arasındaki Fark
Örtülü Bekleme | Açık Bekle |
---|---|
|
|
|
|
|
|
Sonuç:
Örtülü, Açık ve Akıcı Bekleme Selenium'da kullanılan farklı beklemelerdir. Bu beklemelerin kullanımı tamamen farklı zaman aralıklarında yüklenen elemanlara dayanmaktadır. Uygulamamızı test ederken veya çerçevemizi oluştururken Thread.Sleep () kullanılması her zaman tavsiye edilmez.
Bu makale Chaitanya Pujari tarafından hazırlanmıştır.