İlk Selenium Webdriver Script: JAVA Örnek Kod Örneği

İçindekiler:

Anonim

Önceki öğreticide oluşturduğumuz "sınıfım" Java sınıfını kullanarak, aşağıdakileri yapacak bir WebDriver betiği oluşturmaya çalışalım:

  1. Mercury Tours'un ana sayfasını getir
  2. başlığını doğrula
  3. karşılaştırmanın sonucunu yazdır
  4. tüm programı sonlandırmadan önce kapatın.

WebDriver Kodu

Yukarıdaki senaryo tarafından sunulan mantık için gerçek WebDriver kodu aşağıdadır

Not: Firefox 35'ten başlayarak, Web Sürücüsünü kullanmak için Mozilla tarafından oluşturulan gecko sürücüsünü kullanmanız gerekir. Selenium 3.0, gecko ve firefox'un uyumluluk sorunları var ve bunları doğru şekilde ayarlamak zorlu bir görev haline gelebilir. Kod çalışmazsa, Firefox sürüm 47 veya daha eski bir sürüme geçin. Alternatif olarak, komut dosyalarınızı Chrome'da çalıştırabilirsiniz. Selenium, Chrome için kutudan çıkar çıkmaz çalışır. Komut dosyanızın Chrome veya Firefox ile çalışmasını sağlamak için 3 satırlık kodu değiştirmeniz yeterlidir.

newproject paketi;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;// Chrome'u kullanmak için yukarıdaki satırı yorumlayın ve aşağıdaki satırın yorumunu kaldırın// org.openqa.selenium.chrome.ChromeDriver'ı içe aktar;public class PG1 {public static void main (String [] args) {// nesnelerin / değişkenlerin bildirimi ve somutlaştırılmasıSystem.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");WebDriver sürücüsü = yeni FirefoxDriver ();// Chrome'u kullanmak için yukarıdaki 2 satırı yorumlayın ve 2 satırın altındaki yorumu kaldırın//System.setProperty("webdriver.chrome.driver","G:\\\chromedriver.exe ");// WebDriver sürücüsü = new ChromeDriver ();String baseUrl = "http://demo.guru99.com/test/newtours/";String beklenenTitle = "Hoş Geldiniz: Merkür Turları";String actualTitle = "";// Fire fox'u başlatın ve Temel URL'ye yönlendirindriver.get (baseUrl);// başlığın gerçek değerini alrealTitle = driver.getTitle ();/ ** sayfanın gerçek başlığını beklenen ile karşılaştırın ve yazdırın* "Geçti" veya "Başarısız" olarak sonuç* /eğer (actualTitle.contentEquals (beklenenTitle)) {System.out.println ("Test Başarılı!");} Başka {System.out.println ("Test Başarısız");}// Ateş tilkisini kapatdriver.close ();}}

Kodu açıklama

Paketleri İçe Aktarma

Başlamak için aşağıdaki iki paketi içe aktarmanız gerekir:

  1. org.openqa.selenium. * - belirli bir sürücü ile yüklenmiş yeni bir tarayıcıyı başlatmak için gereken WebDriver sınıfını içerir
  2. org.openqa.selenium.firefox.FirefoxDriver - WebDriver sınıfı tarafından örneklenen tarayıcıda Firefox'a özgü bir sürücüyü başlatmak için gereken FirefoxDriver sınıfını içerir

Testiniz başka bir sınıfa erişmek, tarayıcı ekran görüntüleri almak veya harici dosyaları değiştirmek gibi daha karmaşık eylemlere ihtiyaç duyuyorsa, kesinlikle daha fazla paket içeri aktarmanız gerekecektir.

Nesneleri ve değişkenleri örnekleme

Normalde, bu bir sürücü nesnesinin örneğinin nasıl oluşturulduğudur.

Parametre içermeyen bir FirefoxDriver sınıfı, varsayılan Firefox profilinin Java programımız tarafından başlatılacağı anlamına gelir. Varsayılan Firefox profili, Firefox'u güvenli modda başlatmaya benzer (hiçbir uzantı yüklenmez).

Kolaylık sağlamak için, Temel URL'yi ve beklenen başlığı değişkenler olarak kaydettik.

Bir Tarayıcı Oturumu Başlatma

WebDriver'ın get () yöntemi, yeni bir tarayıcı oturumu başlatmak için kullanılır ve bunu, parametresi olarak belirttiğiniz URL'ye yönlendirir.

Gerçek Sayfa Başlığını Alın

WebDriver sınıfı , her zaman o anda yüklü olan sayfanın sayfa başlığını almak için kullanılan getTitle () yöntemine sahiptir.

Beklenen ve Gerçek Değerleri Karşılaştırın

Kodun bu bölümü, asıl başlığı beklenen başlıkla karşılaştırmak için basit bir Java if-else yapısını kullanır.

Tarayıcı Oturumunu Sonlandırma

Tarayıcı penceresini kapatmak için " close () " yöntemi kullanılır.

Tüm Programın Sonlandırılması

Bu komutu, önce tüm tarayıcı pencerelerini kapatmadan kullanırsanız, tarayıcı penceresini açık bırakırken tüm Java programınız sona erecektir.

Testi Çalıştırmak

Eclipse IDE'de kod çalıştırmanın iki yolu vardır.

  1. Eclipse'in menü çubuğunda Çalıştır> Çalıştır'ı tıklayın .
  2. Kodun tamamını çalıştırmak için Ctrl + F11 tuşlarına basın .

Her şeyi doğru yaptıysanız, Eclipse "Test Geçti!"

GUI Öğelerini Bulma

Öğelerin WebDriver'da bulunması " findElement (By. Locator ()) " yöntemi kullanılarak yapılır. Kodun "yer belirleyici" kısmı, bu eğitimlerin Selenium IDE bölümlerinde daha önce tartışılan yer belirleyicilerden herhangi biriyle aynıdır. Aslında, GUI öğelerini IDE kullanarak bulmanız ve başarıyla tanımlandıktan sonra kodu WebDriver'a aktarmanız önerilir.

Bir öğeyi kimliğine göre bulan bir Selenium örnek kodu. Facebook, Temel URL olarak kullanılır.

newproject paketi;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;public class PG2 {public static void main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");WebDriver sürücüsü = yeni FirefoxDriver ();String baseUrl = "http://www.facebook.com";String tagName = "";driver.get (baseUrl);tagName = sürücü.findElement (Yazan.id ("e-posta")). getTagName ();System.out.println (tagName);driver.close ();System.exit (0);}}

Kimliği "email" olan belirli öğenin etiket adını çıkarmak için getTagName () yöntemini kullandık. Çalıştırıldığında, bu kod "input" etiket adını doğru bir şekilde tanımlayabilmeli ve bunu Eclipse'in Konsol penceresinde yazdıracaktır.

Öğeleri bulmak için özet

varyasyon Açıklama Örneklem
Tarafından. sınıf adı "class" özniteliğinin değerine göre öğeleri bulur findElement (SınıfAdı ("bir SınıfAdı"))
Tarafından. cssSelector sürücünün temelindeki CSS Seçici motoruna dayalı öğeleri bulur findElement (By.cssSelector ("input # email"))
Tarafından. İD öğeleri "id" özniteliğinin değerine göre bulur findElement (Yazan.id ("birKimlik"))
Tarafından. bağlantı metni tam görüntülediği metne göre bir bağlantı öğesi bulur findElement (By.linkText ("KAYIT"))
Tarafından. isim öğeleri "ad" özniteliğinin değerine göre bulur findElement (By.name ("bazıAd"))
Tarafından. kısmiLinkText verilen bağlantı metnini içeren öğeleri bulur findElement (By.partialLinkText ("REG"))
Tarafından. etiket adı öğeleri etiket adlarına göre bulur findElement (By.tagName ("div"))
Tarafından. xpath öğeleri XPath aracılığıyla bulur findElement (By.xpath ("// html / body / div / table / tbody / tr / td [2] / table / tbody / tr [4] / td / table / tbody / tr / td [2] / table / tbody / tr [2] / td [3] / form / table / tbody / tr [5] "))

FindElement Kullanmaya İlişkin Not (By.cssSelector ())

By.cssSelector (), "içerir" özelliğini desteklemez . Aşağıdaki Selenium IDE kodunu düşünün -

Yukarıdaki Selenium IDE'de testin tamamı geçti. Ancak aşağıdaki Selenium WebDriver komut dosyasında, WebDriver By.cssSelector () yönteminde kullanıldığında "içerir" anahtar sözcüğünü desteklemediği için aynı test bir hata oluşturdu.

Ortak Komutlar

Web Öğelerini Örnekleme

Belirli bir öğeye her eriştiğinizde uzun "driver.findElement (By.locator ())" sözdizimini kullanmak yerine, bunun için bir WebElement nesnesi oluşturabiliriz. WebElement sınıfı, "org.openqa.selenium. *" Paketinde bulunur.

Bir Elemana Tıklamak

Tıklama, web öğeleriyle etkileşim kurmanın belki de en yaygın yoludur . Click () yöntemi, herhangi bir öğenin tıklamasını simüle etmek için kullanılır. Aşağıdaki Selenium Java örneği, Mercury Tours'un "Oturum Aç" düğmesine tıklamak için click () 'in nasıl kullanıldığını gösterir.

Click () yöntemi kullanılırken aşağıdaki hususlara dikkat edilmelidir.

  • Herhangi bir parametre / argüman almaz.
  • Yöntem , uygunsa otomatik olarak yeni bir sayfanın yüklenmesini bekler .
  • Tıklanacak öğe görünür olmalıdır (yükseklik ve genişlik sıfıra eşit olmamalıdır).

Komutları Alın

Komutları al, sayfa / öğe hakkında çeşitli önemli bilgileri getirir. İşte aşina olmanız gereken bazı önemli "alma" komutları.

Komutlar Kullanım
get () Örnek kullanım:
  • Otomatik olarak yeni bir tarayıcı penceresi açar ve parantez içinde belirttiğiniz sayfayı getirir.
  • Selenium IDE'nin "aç" komutunun karşılığıdır.
  • Parametre bir String nesnesi olmalıdır .
getTitle () Örnek kullanım:
  • Parametre gerektirmez
  • Mevcut sayfanın başlığını getirir
  • Baştaki ve sondaki beyaz boşluklar kırpılır
  • Sayfanın başlığı yoksa boş bir dize döndürür
getPageSource () Örnek kullanım:
  • Parametre gerektirmez
  • Sayfanın kaynak kodunu bir Dize değeri olarak döndürür
getCurrentUrl () Örnek kullanım:
  • Parametre gerektirmez
  • Tarayıcının baktığı mevcut URL'yi temsil eden dizeyi getirir
getText () Örnek kullanım:
  • Getirir iç metni belirttiğiniz o elemanın

Gezinme komutları

Bu komutlar, farklı web sayfalarını yenilemenize, içeri girmenize ve arasında geçiş yapmanıza olanak tanır.

() gidin. () Örnek kullanım:
  • Otomatik olarak yeni bir tarayıcı penceresi açar ve parantez içinde belirttiğiniz sayfayı getirir .
  • Get () yöntemiyle tam olarak aynı şeyi yapar.
navigate (). renew () Örnek kullanım:
  • Parametre gerektirmez.
  • Bu yeniler Geçerli sayfayı.
navigate (). back () Örnek kullanım:
  • Parametre gerektirmez
  • Tarayıcı geçmişinde sizi bir sayfa geri götürür .
navigate (). forward () Örnek kullanım:
  • Parametre gerektirmez
  • Tarayıcı geçmişinde sizi bir sayfa ileri götürür .

Tarayıcı Pencerelerini Kapatma ve Çıkma

close () Örnek kullanım:
  • Parametre gerektirmez
  • Yalnızca WebDriver'ın şu anda kontrol ettiği tarayıcı penceresini kapatır .
quit () Örnek kullanım:
  • Parametre gerektirmez
  • WebDriver'ın açtığı tüm pencereleri kapatır.

Close () ve quit () arasındaki farkı açıkça göstermek için aşağıdaki kodu çalıştırmayı deneyin. Sayfa yüklendiğinde otomatik olarak bir pencere açan ve çıktıktan sonra başka bir pencere açan bir web sayfası kullanır.

İki açılır pencerenin değil, yalnızca ana tarayıcı penceresinin kapatıldığına dikkat edin.

Ancak quit () kullanırsanız, tüm pencereler kapatılacaktır - sadece üst pencere değil. Aşağıdaki kodu çalıştırmayı deneyin ve yukarıdaki iki açılır pencerenin de otomatik olarak kapatılacağını göreceksiniz.

newproject paketi;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;public class PG3 {public static void main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");WebDriver sürücüsü = yeni FirefoxDriver ();driver.get ("http://www.popuptest.com/popuptest2.html");driver.quit (); // QUIT kullanıldığında tüm pencereler kapanacak}}

Çerçeveler Arasında Geçiş Yapma

Bir Çerçevedeki GUI öğelerine erişmek için, WebDriver'ı, içindeki öğelere erişmeden önce çerçeveye veya açılır pencereye odaklanmaya yönlendirmeliyiz. Örneğin http://demo.guru99.com/selenium/deprecated.html web sayfasını ele alalım.

Bu sayfada "ad" öznitelikleri yukarıda belirtilen 3 çerçeve vardır. Yukarıda sarı ile çevrili "Kullanımdan Kaldırıldı" bağlantısına erişmek istiyoruz. Bunu yapmak için önce WebDriver'a "switchTo (). Frame ()" yöntemini kullanarak "classFrame" çerçevesine geçmesini söylemeliyiz . "Frame ()" bölümü için parametre olarak çerçevenin name niteliğini kullanacağız.

newproject paketi;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;public class PG4 {public static void main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");WebDriver sürücüsü = yeni FirefoxDriver ();driver.get ("http://demo.guru99.com/selenium/deprecated.html");driver.switchTo (). çerçeve ("classFrame");driver.findElement (By.linkText ("Kullanımdan Kaldırıldı")). tıklayın ();driver.close ();}}

Bu kodu çalıştırdıktan sonra, "classFrame" çerçevesinin "Kullanımdan Kaldırılmış API" sayfasına götürüldüğünü, yani kodumuzun "Kullanımdan Kaldırıldı" bağlantısına başarıyla erişebildiğini göreceksiniz.

Açılır Pencereler Arasında Geçiş Yapma

WebDriver, Selenium IDE'den farklı olarak uyarılar gibi açılır pencerelerin görüntülenmesine izin verir. Uyarı içindeki öğelere (içerdiği mesaj gibi) erişmek için "switchTo (). Alert ()" yöntemini kullanmalıyız. Aşağıdaki kodda, uyarı kutusuna erişmek ve ardından "getText ()" yöntemini kullanarak mesajını almak için bu yöntemi kullanacağız ve ardından "switchTo (). Alert (). Accept () kullanarak uyarı kutusunu otomatik olarak kapatacağız . " yöntem.

Önce, http://jsbin.com/usidix/1 adresine gidin ve manuel olarak "Git!" orada düğmesine basın ve mesaj metnini kendiniz görün.

Bunu yapmak için Selenium örnek koduna bakalım-

paket paketim;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;public class myclass {public static void main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");WebDriver sürücüsü = yeni FirefoxDriver ();String alertMessage = "";driver.get ("http://jsbin.com/usidix/1");driver.findElement (By.cssSelector ("input [value = \" Git! \ "]")) tıklayın ();alertMessage = driver.switchTo (). alert (). getText ();driver.switchTo (). alert (). accept ();System.out.println (alertMessage);driver.quit ();}}

Eclipse konsolunda, yazdırılan uyarı mesajının şu olduğuna dikkat edin:

Bekler

İki çeşit bekleme vardır.

  1. Örtülü bekleme - program boyunca varsayılan bekleme süresini ayarlamak için kullanılır
  2. Açık bekleme - yalnızca belirli bir örnek için bekleme süresini ayarlamak için kullanılır

Örtülü Bekleme

  • Kodlamak Explicit Waits'ten daha kolaydır.
  • Genellikle kodun somutlaştırma kısmında bildirilir.
  • İçe aktarmak için yalnızca bir ek pakete ihtiyacınız olacak.

Örtülü bekleme kullanmaya başlamak için, bu paketi kodunuza aktarmanız gerekir.

Ardından kodunuzun örnekleme kısmına bunu ekleyin.

Açık Bekle

Açık beklemeler, WebDriverWait ve ExpectedCondition sınıfları kullanılarak yapılır . Aşağıdaki Selenium WebDriver örneği için, bir sonraki komuta geçmeden önce kimliği "kullanıcı adı" olan bir öğenin görünür hale gelmesi için 10 saniyeye kadar bekleyeceğiz. İşte adımlar.

Aşama 1

Bu iki paketi içe aktarın:

Adım 2

Bir WebDriverWait değişkeni bildirin. Bu örnekte, değişken adı olarak "myWaitVar" kullanacağız.

Aşama 3

ExpectedConditions ile myWaitVar'ı, oluşması için açık bir şekilde beklemeye ihtiyaç duyduğunuz kısımlarda kullanın. Bu durumda, üzerine "öğretici" metnini yazmadan önce "kullanıcı adı" (Mercury Tours Ana Sayfa) girişinde açık beklemeyi kullanacağız.

Koşullar

Koşullu ve döngü işlemlerinde aşağıdaki yöntemler kullanılır -

  • isEnabled () , bir komutu çalıştırmadan önce belirli bir elemanın etkinleştirilip etkinleştirilmediğini doğrulamak istediğinizde kullanılır.
  • isDisplayed () , bir komutu çalıştırmadan önce belirli bir öğenin görüntülenip görüntülenmediğini doğrulamak istediğinizde kullanılır.
  • isSelected () , açılır kutudaki belirli bir onay kutusunun, radyo düğmesinin veya seçeneğin seçilip seçilmediğini doğrulamak istediğinizde kullanılır . Diğer unsurlarda çalışmaz.

ExpectedConditions'ı kullanma

ExpectedConditions sınıfı, WebDriverWait'in until () yöntemiyle birlikte kullanabileceğiniz daha geniş bir koşullar kümesi sunar.

Aşağıda en yaygın ExpectedConditions yöntemlerinden bazıları verilmiştir.

  • alertIsPresent () - bir uyarı kutusu görüntülenene kadar bekler.
  • elementToBeClickable () - Bir öğe görünene ve aynı zamanda etkinleştirilene kadar bekler. Aşağıdaki örnek Selenium Kodu, bu öğeyi "txtUserName" adlı bir WebElement değişkeni olarak atamadan önce, öğesinin görünür hale gelmesini ve etkinleştirilmesini bekleyecektir.
  • frameToBeAvailableAndSwitchToIt () - Verilen çerçeve zaten kullanılabilir olana kadar bekler ve ardından otomatik olarak ona geçiş yapar.

İstisnaları Yakalama

İsEnabled (), isDisplayed () ve isSelected () kullanılırken WebDriver, öğenin sayfada zaten mevcut olduğunu varsayar. Aksi takdirde, bir NoSuchElementException oluşturur. . Bundan kaçınmak için, programın kesintiye uğramaması için bir dene-yakala bloğu kullanmalıyız.

WebElement txtbox_username = driver.findElement (By.id ("kullanıcı adı"));Deneyin{eğer (txtbox_username.isEnabled ()) {txtbox_username.sendKeys ("öğretici");}}catch (NoSuchElementException nsee) {System.out.println (nsee.toString ());}

Açıkça beklemeler kullanırsanız, yakalamanız gereken istisna türü "TimeoutException" dır.

Özet

  • WebDriver API'yi kullanmaya başlamak için en az bu iki paketi içe aktarmalısınız.
  • org.openqa.selenium. *
  • org.openqa.selenium.firefox.FirefoxDriver
  • Get () metodu Selenyum IDE "açık" komutu eşdeğerdir.
  • WebDriver'da öğeleri bulmak, findElement () yöntemi kullanılarak yapılır .
  • Aşağıdakiler, WebDriver'da öğeleri bulmak için mevcut seçeneklerdir:
  • Tarafından. sınıf adı
  • Tarafından. cssSelector
  • Tarafından. İD
  • Tarafından. bağlantı metni
  • Tarafından. isim
  • Tarafından. kısmiLinkText
  • Tarafından. etiket adı
  • Tarafından. xpath
  • By.cssSelector () değil desteklemek "içerir" özelliğini.
  • WebElement sınıfını kullanarak bir öğeyi başlatabilirsiniz .
  • Bir elemanın tıklanması, click () yöntemi kullanılarak yapılır .
  • WebDriver şu kullanışlı alma komutlarını sağlar :
  • almak()
  • getTitle ()
  • getPageSource ()
  • getCurrentUrl ()
  • getText ()
  • WebDriver şu yararlı gezinme komutlarını sağlar
  • gezin (). ileri ()
  • gezin (). geri ()
  • şu yöne rotayı ayarla()
  • navigate (). yenileme ()
  • Close () ve quit () yöntemleri tarayıcı pencerelerini kapatmak için kullanılır. Close () , tek bir pencereyi kapatmak için kullanılır; ise çıkmak () WebDriver nesnesi kontrol olduğu üst pencerede ilgili tüm pencereleri kapatmak için kullanılır.
  • SwitchTo (). Çerçeve () ve switchTo (). Alert () yöntemleri sırasıyla bir çerçeve veya uyarı üzerine doğrudan WebDriver odağını için kullanılır.
  • Açık beklerken , program boyunca bekleme süresini ayarlamak için örtük beklemeler kullanılır. yalnızca belirli bölümlerde kullanılır.
  • Bir öğenin durumunu doğrularken isEnabled (), isDisplayed (), isSelected () ve WebDriverWait ve ExpectedConditions yöntemlerinin bir kombinasyonunu kullanabilirsiniz . Ancak, elemanın var olup olmadığını doğrulamazlar.
  • Öğe mevcut değilken isEnabled (), isDisplayed () veya isSelected () çağrıldığında, WebDriver bir NoSuchElementException oluşturur .
  • Öğe mevcut değilken WebDriverWait ve ExpectedConditions yöntemleri çağrıldığında, WebDriver bir TimeoutException oluşturur .

Not:

driver.get (): Belirli bir web sitesine gitmek için kullanılır, ancak tarayıcı Geçmişini ve çerezleri korumaz, bu nedenle ileri ve geri düğmesini kullanamayız, buna tıklarsak, sayfa programlanmayacaktır.

driver.navigate (): belirli bir web sitesine gitmek için kullanılır, ancak tarayıcı geçmişini ve çerezleri korur, böylece Testcase'in kodlanması sırasında sayfalar arasında gezinmek için ileri ve geri düğmesini kullanabiliriz.