Selenium Bekle – Sözdizimi ile Açık ve Kapalı


In Selenium, "Beklemeler" testlerin yürütülmesinde önemli bir rol oynar. Bu eğitimde, Kapalı ve Açık bekleme arasındaki çeşitli yönleri ve farkları öğreneceksiniz. Selenium.

Neden Beklemeye İhtiyacımız Var? Selenium?

Web uygulamalarının çoğu kullanılarak geliştirilmiştir. Ajax ve Javascript. Bir sayfa tarayıcı tarafından yüklendiğinde etkileşimde bulunmak istediğimiz öğeler farklı zaman aralıklarında yüklenebilir.

Bu sadece öğenin tanımlanmasını zorlaştırmakla kalmaz, aynı zamanda öğenin yeri belirlenmezse "ElementNotVisibleException" istisna. Kullanma Selenium Bekleyin, bu sorunu çözebiliriz.

Testimizde hem örtülü hem de açık beklemeleri kullanmamız gereken bir senaryo düşünelim. Örtülü bekleme süresinin 20 saniyeye, açık bekleme süresinin ise 10 saniyeye ayarlandığını varsayalım.

Bazı özelliklere sahip bir element bulmaya çalıştığımızı varsayalım. “Beklenen Koşullar “(Açık Bekleme), Eğer eleman Açık Bekleme(10 Saniye) tarafından tanımlanan zaman diliminde yer almıyorsa, bir “ fırlatmadan önce örtük bekleme(20 saniye) tarafından tanımlanan zaman dilimini kullanacaktır.ElementNotVisibleException".

Selenium Web Sürücüsü Bekliyor

  1. örtük bekle
  2. Açık Bekleyin

Bu eğitimde farklı bekleme türlerini öğreneceksiniz. Selenium:

Örtülü Bekleme Selenium

The Örtülü Bekleme Selenium web sürücüsüne "Böyle Bir Öğe İstisnası Yok" fırlatmadan önce belirli bir süre beklemesini söylemek için kullanılır. Varsayılan ayar 0'dır. Zamanı ayarladıktan sonra web sürücüsü bir istisna fırlatmadan önce öğeyi o süre boyunca bekleyecektir.

Selenium Web Sürücüsü örtülü beklemeler fikrini ödünç almıştır. Watir.

Aşağıdaki örnekte, 10 saniyelik zaman çerçevesiyle örtülü bir bekleme bildirdik. Bu, öğenin bu zaman dilimi içinde web sayfasında bulunmaması durumunda bir istisna oluşturacağı anlamına gelir.

Örtülü beklemeyi bildirmek için Selenium Web Sürücüsü:

Örtülü Bekleme sözdizimi:

driver.manage().timeouts().implicitlyWait(TimeOut, TimeUnit.SECONDS);
package guru.test99;
import 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 {
	
	protected WebDriver driver;
	@Test
	public void guru99tutorials() throws InterruptedException 
	{
	System.setProperty ("webdriver.chrome.driver",".\\chromedriver.exe" );
	driver = new ChromeDriver(); 
	driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS) ;
	String eTitle = "Demo Guru99 Page";
	String aTitle = "" ;
	// launch Chrome and redirect it to the Base URL
	driver.get("https://demo.guru99.com/test/guru99home/" );
	//Maximizes the browser window
	driver.manage().window().maximize() ;
	//get the actual value of the title
	aTitle = driver.getTitle();
	//compare the actual title with the expected title
	if (aTitle.equals(eTitle))
	{
	System.out.println( "Test Passed") ;
	}
	else {
	System.out.println( "Test Failed" );
	}
	//close browser
	driver.close();
}
}

Kod Açıklaması

Yukarıdaki örnekte,

Aşağıdaki Kodu Dikkate Alın:

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

Örtülü bekleme 2 parametre kabul edecektir, ilk parametre zamanı bir tam sayı değeri olarak kabul edecek ve ikinci parametre ise SANİYE, DAKİKA, MİLİSANİYE, MİKROSANİYE, NANSANİYE, GÜN, SAAT vb. cinsinden zaman ölçümünü kabul edecektir.

Açık Bekleme Selenium

The Açık Bekleme Selenium Web Sürücüsüne belirli koşulları (Beklenen Koşullar) veya “ElementNotVisibleException” istisnasını fırlatmadan önce maksimum sürenin aşılmasını beklemesini söylemek için kullanılır. Akıllı bir bekleme türüdür, ancak yalnızca belirtilen öğeler için uygulanabilir. Dinamik olarak yüklenen Ajax öğelerini beklediği için örtük beklemeden daha iyi seçenekler sunar.

Açık beklemeyi bildirdikten sonra “ kullanmamız gerekir.Beklenen Koşullar”veya kullanarak durumu ne sıklıkta kontrol etmek istediğimizi yapılandırabiliriz. akıcı bekle. Bu günlerde uygularken kullanıyoruz Thread.Sleep() genellikle kullanılması tavsiye edilmez

Aşağıdaki örnekte “” için referans beklemesi oluşturuyoruz.Web SürücüsüBekle"sınıfı ve" kullanılarak örneklenmesiWeb Sürücüsü” referansıyla maksimum 20 saniyelik bir zaman dilimi veriyoruz.

Açık Bekleme sözdizimi:

WebDriverWait wait = new WebDriverWait(WebDriverRefrence,TimeOut);
package guru.test99;

import 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 {
	protected WebDriver driver;
	@Test
	public void guru99tutorials() throws InterruptedException 
	{
	System.setProperty ("webdriver.chrome.driver",".\\chromedriver.exe" );
	driver = new ChromeDriver(); 
	WebDriverWait wait=new WebDriverWait(driver, 20);
	String eTitle = "Demo Guru99 Page";
	String aTitle = "" ;
	// launch Chrome and redirect it to the Base URL
	driver.get("https://demo.guru99.com/test/guru99home/" );
	//Maximizes the browser window
	driver.manage().window().maximize() ;
	//get the actual value of the title
	aTitle = driver.getTitle();
	//compare the actual title with the expected title
	if (aTitle.contentEquals(eTitle))
	{
	System.out.println( "Test Passed") ;
	}
	else {
	System.out.println( "Test Failed" );
	}
	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 Dikkate Alı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, "" bölümünde tanımlanan süreyi bekleyin.Web SürücüsüBekle” sınıfı veya “Beklenen KoşullarHangisi önce gelirse o gerçekleşir.

Yukarıdaki Java kod, “de tanımlandığı gibi 20 saniyelik zaman dilimi boyunca bir öğeyi beklediğimizi belirtir.Web SürücüsüBekleweb sayfasındaki sınıfa kadar “Beklenen Koşullar” karşılanmıştır ve koşul “Bulunan Öğenin görünürlüğü".

Aşağıda, kullanılabilecek Beklenen Koşullar yer almaktadır: Selenium Açık Bekleyin

  1. uyarıIsPresent()
  2. elementSelectionStateToBe()
  3. elementToBeClickable()
  4. elementToBeSelected()
  5. FrameToBeAvaliableAndSwitchToIt()
  6. görünmezlikOfTheElementLocated()
  7. görünmezlikOfElementWithText()
  8. PresenceOfAllElementsLocatedBy()
  9. PresenceOfElementLocated()
  10. textToBePresentInElement()
  11. textToBePresentInElementLocated()
  12. textToBePresentInElementValue()
  13. başlıkIs()
  14. başlıkİçerir()
  15. görünürlükOf()
  16. görünürlükOfAllElements()
  17. görünürlükOfAllElementsLocatedBy()
  18. görünürlükOfElementLocated()

Akıcı Bekleme Selenium

The Akıcı Bekleme Selenium web sürücüsünün bir koşul için beklemesi için gereken maksimum süreyi ve "ElementNotVisibleException" istisnasını fırlatmadan önce koşulu kontrol etmek istediğimiz sıklığı tanımlamak için kullanılır. Nesne bulunana veya zaman aşımı gerçekleşene kadar web öğesini düzenli aralıklarla kontrol eder.

Sıklık: Durumu düzenli zaman aralığında doğrulamak/kontrol etmek için zaman çerçevesiyle bir tekrarlama döngüsü ayarlama

Bir öğenin farklı zaman aralıklarında yüklendiği bir senaryoyu ele alalım. Öğe 10 saniyelik açık bir bekleme süresi bildirirsek 20 saniye, 20 saniye veya daha da uzun bir sürede yüklenebilir. Bir istisna atmadan önce belirtilen zamana kadar bekleyecektir. Bu tür senaryolarda, akıcı bekleme, öğeyi bulana veya son zamanlayıcı bitene kadar farklı sıklıkta bulmaya çalışacağı için kullanılacak ideal beklemedir.

Akıcı Bekleme sözdizimi:

Wait wait = new FluentWait(WebDriver reference)
.withTimeout(timeout, SECONDS)
.pollingEvery(timeout, SECONDS)
.ignoring(Exception.class);

Yukarıdaki kod kullanımdan kaldırıldı Selenium v3.11 ve üzeri. Kullanman gerekiyor

Wait wait = new FluentWait(WebDriver reference)
.withTimeout(Duration.ofSeconds(SECONDS))
.pollingEvery(Duration.ofSeconds(SECONDS))
.ignoring(Exception.class);

package guru.test99;

import org.testng.annotations.Test;
import java.util.NoSuchElementException;
import java.util.concurrent.TimeUnit;
import 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 {
	protected WebDriver driver;
	@Test
	public void guru99tutorials() throws InterruptedException 
	{
	System.setProperty ("webdriver.chrome.driver",".\\chromedriver.exe" );
	String eTitle = "Demo Guru99 Page";
	String aTitle = "" ;
	driver = new ChromeDriver();
	// launch Chrome and redirect it to the Base URL
	driver.get("https://demo.guru99.com/test/guru99home/" );
	//Maximizes the browser window
	driver.manage().window().maximize() ;
	//get the actual value of the title
	aTitle = driver.getTitle();
	//compare the actual title with the expected title
	if (aTitle.contentEquals(eTitle))
	{
	System.out.println( "Test Passed") ;
	}
	else {
	System.out.println( "Test Failed" );
		}
	
	Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)							
			.withTimeout(30, TimeUnit.SECONDS) 			
			.pollingEvery(5, TimeUnit.SECONDS) 			
			.ignoring(NoSuchElementException.class);
	WebElement clickseleniumlink = wait.until(new Function<WebDriver, WebElement>(){
	
		public WebElement apply(WebDriver driver ) {
			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"));
		}
	});
	//click on the selenium link
	clickseleniumlink.click();
	//close~ browser
	driver.close() ;
	}
}

Kod Açıklaması

Aşağıdaki Kodu Dikkate Alın:

Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)							
	.withTimeout(30, TimeUnit.SECONDS) 			
	.pollingEvery(5, TimeUnit.SECONDS) 			
	.ignoring(NoSuchElementException.class);				

Yukarıdaki örnekte 30 saniyelik zaman aşımı ile akıcı bir bekleme bildiriyoruz ve “” yok sayılarak frekansı 5 saniyeye ayarlıyoruz.NoSuchElementException"

Aşağıdaki Kodu Dikkate Alın:

public WebElement apply(WebDriver driver) {
        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 Öğesi yalnızca Selenium web sayfasındaki bağlantı).

Frekans 5 saniyeye, maksimum süre ise 30 saniyeye ayarlanmıştır. Bu, web sayfasındaki öğeyi maksimum 5 saniye boyunca her 30 saniyede bir kontrol edeceği anlamına gelir. Eleman bu zaman dilimi içerisinde yer alıyorsa işlemleri gerçekleştirecek, aksi takdirde "" atacaktır.ElementNotVisibleException"

Ayrıca Kontrol Edin: - Selenium Yeni Başlayanlar İçin IDE Eğitimi

Örtülü Bekleme ile Açık Bekleme Arasındaki Fark

Aşağıda örtük bekleme ile açık bekleme arasındaki temel farklar yer almaktadır: Selenium:

örtük bekle Açık Bekleyin
Örtülü Bekleme süresi komut dosyasındaki tüm öğelere uygulanır Açık Bekleme süresi yalnızca bizim tarafımızdan amaçlanan öğelere uygulanır
Örtülü Beklemede ihtiyacımız var değil Bulunacak öğe üzerinde "Beklenen Koşullar"ı belirtin Explicit Wait'te konumu belirlenecek eleman üzerinde "ExpectedConditions" belirtmemiz gerekiyor
Öğelerin belirtilen zaman diliminde bulunduğu durumlarda kullanılması tavsiye edilir. Selenium örtülü bekleyiş Elemanların yüklenmesi uzun zaman aldığında ve ayrıca elemanın (visibilityOfElementLocated, elementToBeClickable,elementToBeSelected) gibi özelliklerini doğrulamak için kullanılması önerilir.

Sonuç

Örtülü, Açık ve Akıcı Bekleme, kullanılan farklı beklemelerdir. Selenium. Bu beklemelerin kullanımı tamamen elemanların farklı zaman aralıklarında yüklenmesine dayanmaktadır. sırasında Thread.Sleep() işlevinin kullanılması her zaman önerilmez. Test yapmak uygulamamız veya çerçevemizi oluşturmamız.

Ayrıca Kontrol Edin: - Selenium Yeni Başlayanlar İçin Eğitim: 7 Günde WebDriver'ı Öğrenin

Devamını Oku readmore