Ö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:
- Mercury Tours'un ana sayfasını getir
- başlığını doğrula
- karşılaştırmanın sonucunu yazdır
- 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:
- 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
- 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.
- Eclipse'in menü çubuğunda Çalıştır> Çalıştır'ı tıklayın .
- 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: |
|
getTitle () Örnek kullanım: |
|
getPageSource () Örnek kullanım: |
|
getCurrentUrl () Örnek kullanım: |
|
getText () Örnek kullanım: |
|
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: |
|
navigate (). renew () Örnek kullanım: |
|
navigate (). back () Örnek kullanım: |
|
navigate (). forward () Örnek kullanım: |
|
Tarayıcı Pencerelerini Kapatma ve Çıkma
close () Örnek kullanım: |
|
quit () Örnek kullanım: |
|
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.
- Örtülü bekleme - program boyunca varsayılan bekleme süresini ayarlamak için kullanılır
- 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.