Ana içeriğe atla

Kayıtlar

2019 tarihine ait yayınlar gösteriliyor

TestNG - Öncellikler

TestNG'de çalıştıracağınız kodda birbirine bağımlı @Test ler varsa öncelik kullanarak çalışacak testin sırasına karar verebilirsiniz. TestNG'de herhangi bir öncelik kullanmazsanız alfabetik sıraya göre testleri çalıştırır. @Test (priority=2) gibi bir öncelik ifadesi kullanırsanız, öncelik değeri düşük olandan koşturmaya başlar. Aynı öncelik değerine sahip iki test varsa, alfabetik olarak sıralamaya koyar ve testi koşturur. Koşturacağınız testte hem öncelik değeri olan hem de olmayan testler varsa; önce öncelik değeri olmayan testleri alfabetik sıraya göre daha sonra öncelik değeri düşük olandan başlayarak koşturur. Yine aynı öncelik değeri olan testleri alfabetik sırayla koşturur. TestNG'de büyük/küçük harf duyarlılığı olduğu için "priority" 'nin küçük yazılması gerekir yoksa hata verir. Örnek: Koşturacağımız testte iki grup olduğunu varsayalım. Testleri hem gruplara ayıralım hem öncelik verelim. TestNG'nin bu testleri çalıştırma sırası aşağıda

TestNG - Notasyonlar (Annotations), Doğrulamalar (Assertions)

TestNG, JUnit ve NUnit kütüphanelerinden etkilenen ve onlara göre daha fazla yetkinlik barındıran bir test kütüphanesidir. TestNG ait özellikler ve kolaylıklar için şunları örnek verebiliriz: Notasyonlar (Annotations) Testlerin kendine has Thread’lerde koşabilmesi testng.xml dosyasıyla testlerin önceliklendirilmesi, gruplandırılması vb. kolaylıklar Kendi içerisinde loglama, raporlama desteği Notasyonlar sayesinde kodun ve oluşturulan raporun kolaylıkla anlaşılması @DataProvider notasyonu sayesinde veriye dayalı test desteği (Data Driven Test) Maven, Jenkins vb. ide ler için eklenti desteği Parametre desteği Notasyonlar: @Test Notasyonu Yazılan otomasyon kodunda test olarak çalışmasını istediğimiz kod parçasının önüne bu notasyonu ekleriz. Bu notasyonu birden fazla kez kullanabiliriz. Eğer herhangi bir parametre tanımlanmadıysa testler alfabetik olarak çalışır.  Aşağıdaki parametreler, hangi testin hangi sırayla çalışacağının, koşturulup koşturulmayacağının,

HttpUrlConnection ile Link Doğrulama - Selenium WebDriver

Burada web sayfasındaki bütün metin olarak belirtilen linkleri "a" etiketiyle listeye atıyoruz. Her link için Http isteği gönderip gelen http cevabına göre linkin kırık mı, boş mu, bu web sitesine ait mi vs. olduğunu yazdırıyoruz. Bu kodda HttpUrlConnection sınıfının openConnection yöntemini kullanıyoruz.  Burada "HEAD" kullanılmasının sebebi bütün sayfanın getirilmek istenmemesidir.     @Test     public void verifyLinks() {         String homepage = "http://sinemayk.blogspot.com/";         driver.get(homepage);         String url ="";         HttpURLConnection httpURLConnection = null;         List<WebElement> links = driver.findElements(By.tagName("a"));         Iterator<WebElement> it = links.iterator();         while(it.hasNext()){             url = it.next().getAttribute("href"); //htmlde verilen linkler "href" attribute u ile verildiği için, <a href=”http://google.com/”>G

Tooltips - Selenium WebDriver

Birçok web sayfasında, bazı bağlantıların, metinlerin veya bazen resimlerin üzerine gelindiğinde çıkan yazılara tooltips denir. Bu metin genellikle nesnenin işlevselliğinin kısa bir açıklamasıdır veya bazı durumlarda nesnenin ayrıntılı bir açıklamasını görüntüler. Birçok durumda, test yaparken bu metin açıklamasının beklendiği gibi görüntülenip görüntülenmediğini doğrulamak gerekir. Bu, tooltip'in HTML’e nasıl girdiğine bağlı olarak iki farklı yolla yapılabilir. Tooltip, Html kodunda, herhangi bir elementin ‘title’ bilgisi olarak kullanıldığında. Burada tooltip'in metnini getAttribute() yöntemiyle alabiliriz. Tooltip, Html kodunda, ‘div’de jquery ile mevcut olduğunda. Burada, Actions sınıf yöntemlerini kullanarak tooltip'in metnini alabiliriz.  Örnek: //Burada getAttribute yöntemiyle title olarak verilen tooltip metnini buluyoruz. @Test     public void toolTipStatik() throws InterruptedException{         driver.get("https://www.se

Desired Capabilities

Her test senaryosu, belirli bir test ortamında gerçekleştirilmelidir. Test ortamı bir web tarayıcısı, mobil cihaz, mobil emülatör, mobil simülatör vb. olabilir. Desired capabilities, test senaryomuzda hangi ortamı kullanacağımızı web sürücüsü olarak söylememize yardımcı olur. Desired capabilities, tarayıcının çalışma sırasındaki davranışını belirlemek için tarayıcı adı, tarayıcı sürümü, tarayıcı sürücüsünün sistemi vb. gibi tarayıcı özelliklerini saklayan bir anahtar / değer çifti dizisidir. Desired Capabilities, aşağıdaki gibi durumlarda daha çok kullanılır: Mobil uygulama otomasyonunda, tarayıcı özellikleri ve cihaz özellikleri ayarlamada, Selenyum Grid'de, test durumlarını farklı işletim sistemleri ve sürümleriyle farklı bir tarayıcıda çalıştırmak istediğimizde. Bazı Desired Capabilities yöntemleri: getBrowserName() setBrowserName() getVersion() setVersion() getPlatform() setPlatform() getCapabilityMethod() setCapabilityMethod() Methodların hepsi

Selenium WebDriver - Dinamik Web Tablolarla Kod Örnekleri

Verisi sürekli değişen tablolarda XPath kullanılması gerekir. Bunu da tablonun satır ve sütun sayı bilgileriyle yapmak daha doğru olur. Tablo 1: Şirket Grup Kapanış Şimdiki Ücret % Değişim IL&FS Transportation A 337.4 66.5 + 5.4 GRUH Finance Li A 383.8 998.9 + 2.3 IDFC Bank A 351.4 715.9 + 5.1 YES Bank Ltd. A 697.9 669.3 + 3.2 IRB Infrastructure A 271 724.8 + 3.1 Escorts Ltd. A 113.4 890.3 + 5.1 Cox & Kings L A 867 900.8 + 5.5 Bharat Electroni A 176.5 849 + 7.5 Nestle India A 64.8 187.3 + 7.6 Cox & Kings L A 749.4 729.5 + 9.5 JK Tyre & Industries A 687 601.4 + 6 Navin Fluorine Inter A 416.7 865.3 + 8.9 NIIT Technologies A 966.9 117.2 + 9.4 DCB Bank A 853.2 760.2 + 2.4 UCO Bank A 358 719.6 + 9 Coffee Day Enterpris A 53.8 538.6 + 4.1 Kirloskar Oil Engine A 134.1 102.8 + 7.7 Repco Home Finance L A 96.2 449.9 + 8.9 Ajanta Pharma Lt A 161.3 838 + 4.4 CESC Ltd. A 817 490.5 + 4.7 JaiprakashAssociates A 247.3 961.1 + 7.1 Vakrangee A 888.3 652.9

Selenium WebDriver ile Web Sayfasındaki Tablo Elementlerini Bulma

Basit Tablo Yandaki tabloda "fourth cell" yazan satırı test kodumuzda XPath kullanarak bulmaya çalışacağız. Herhangi belirgin bir attribute u olmayan basit tablolarda kendimiz xpath değerini  aşağıdaki gibi yazabiliriz. //table/tbody/tr[2]/td[2] Tablo, her zaman "parent"olan table değeri ile başlar ve xpath kodunun başına da her zaman // konur. Daha sonra "table" dan sonra onun alt elemanı(child) olan " tbody " tek slash ile "/" sağına yazılır. "Fourth cell" tabloda tbody parent ının 2. tr ve 2. td sinde olduğu için tr[2] ve td[2] yazmamız gerekir. Eğer 2 sayısını belirtmezseniz; hem tr tag inin hem de td tag inin ilk elementini getirir yani sonuçta "first cell" i elde etmiş olursunuz. ***************************************************** İç içe Tablo Bu tabloda görüldüğü gibi iç içe 2 tablo eklenmiş. Burada da "4-5-6" değerini bulmak istersek aşağıdaki kodu kullanmalıyız. Yani ilk tab

Failed to connect to repository : Error performing command: git.exe ls-remote -h

Jenkins'de yeni projeniz için konfigürasyon ayarında, kaynak kod yönetim aracı olarak seçtiğiniz (scm, source control management) Git için Repository URL eklerken bu hatayı alıyorsanız ve Git bilgisayarınızda yüklüyse Jenkins ana ekrana gelin Jenkins'i Yönet'e tıklayıp  http://localhost:8080/manage  adresine gelin. Global Tool Configuration'a tıklayıp  http://localhost:8080/configureTools/  adresine gelin. Git kısmında "Add Git" butonuna tıklayın. Name kısmına "Git", Path to Git executable kısmına da indirmiş olduğunuz Git'in exe sinin bulunduğu konumu sonu ".exe" bitecek şeklinde girin. (Örn:C:\Program Files\Git\bin\git.exe) En alttaki "Apply" ve "Save" tuşlarına sırayla basın. Daha sonra yeni projenizin konfigürasyon ayarına Git Repository Url i girdiğinizde aynı hatayı almadığınızı görmelisiniz.

Selenium Actions Sınıfını Kullanarak Klavye ve Fare İşlemleri

Karmaşık kullanıcı hareketlerini (sağ tıklama, iki kere tıklama, sürükleme,...) taklit etmek için kullanılan API. Doğrudan Klavye veya Fare kullanmak yerine bu sınıf kullanılır. Build patternini uygular: yöntem çağrıları tarafından belirtilen tüm eylemleri içeren bir CompositeAction oluşturur. Kullanıcı hareketlerini uygulayan fonksiyonları kullanmak için Actions ve Action sınıfını import etmek gerekir: Actions sınıfı ve Action sınıfı, WebDriver API'sinin org.openqa.selenium.Interactions paketinde bulunur. import org.openqa.selenium.interactions.Actions; import org.openqa.selenium.interactions.Action; Yöntemlerini kullanmaya çağırmak için Actions sınıfı nesnesine ihtiyaç vardır.  Actions actions = new Actions(WebDriver nesnesi); Üzerinde işlem yapılacak elementi bulmak gerekiyor. WebElement webElement = driver.findElement(...);  actions.contextClick(webElement).perform(); //contextClick, element üzerinde sağ tıklar. Bu sınıfının bazı fonksiyonları:

Drop Down List

Drop-Down Box'ı kontrol etmek için en başta iki şey yapmak gerekir: org.openqa.selenium.support.ui.Select paketini import etmek drop-down box' ı, "Select"  objesi olarak tanıtmak Drop Down'daki en yaygın yöntemler: selectByVisibleText()/ deselectByVisibleText() görünen text e göre bir değer seçer/seçili özelliğini kaldırır selectByValue()/ deselectByValue() "value" değerine göre seçer/ seçili özelliğini kaldırır selectByIndex()/ deselectByIndex() indexine göre seçer/seçili özelliğini kaldırır isMultiple() drop-down bir kerede birden fazla değer seçtiriyorsa TRUE döndürür, aksi halde FALSE döndürür, parametre istemez deselectAll() Bütün seçili değerleri kaldırır Bir web sayfasına kayıt olurken ülke seçeneğinden değer seçiyor olun, kodu aşağıdaki gibi olmalıdır:         driver.get("http://...");         Select drpCountry = new Select(driver.findElement(By.name("country")));         drpCountry.sele

NoSuchElementException()

"Firepath" ya da "Inspect Element" seçeneğini kullanarak kullandığınız locatorın değerini web sayfasındaki değer ile karşılaştırın. Bazı değerler dinamik olup sayfa her açıldığında farklı değer alabilir. Bu durumda daha karmaşık fakat güvenilir olan By.xpath() ya da By.cssSelector() yöntemini kullanın. Bazen de bu hata bekleme sorunundan kaynaklanabilir. Web Driver, sayfa tam olarak yüklenmeden kodunuzu çalıştırıyor olabilir. Bu durumda da findElement() fonksiyonunuzdan önce wait ile bekleme süresi ekleyebilir, implicit ya da explicit wait fonksiyonlarını kullanabilirsiniz.

Maven Test Kodu Çalıştırma

Maven'de tek bir test yöntemi çalıştırmak için komutu şu şekilde sağlamanız gerekir: mvn test -Dtest=TestCircle#xyz test TestCircle, test sınıfı adıdır ve xyz, test yöntemidir. Joker karakterleri de çalışır; hem yöntem adına hem de sınıf adına. Çok modüllü bir projede test yapıyorsanız, testin -pl <module-name> ile olduğu modülü belirtin. ************************ Aşağıdaki sözdizimini kullanarak belirli test sınıflarını ve yöntemlerini çalıştırabilirsiniz: tam paket: mvn testi -Dtest = "com.Oracle.tests. **" bir sınıftaki tüm yöntem: mvn testi -Dtest = CLASS_NAME1 tek sınıftan tek yöntem: mvn testi -Dtest = CLASS_NAME1 # METHOD_NAME1 çoklu sınıftan çoklu yöntem: mvn testi -Dtest = CLASS_NAME1 # METHOD_NAME1, CLASS_NAME2 # METHOD_NAME2

Document Object Model (DOM)

DOM D ocument  O bject  M odel kelimesinin kısaltılmasından gelir ve Türkçe karşılığı Belge Nesne Modelidir. DOM,  HTML, XML  gibi belgelerin diğer programlama dilleri veya script dilleriyle iletişim kurabilmesini sağlamak için geliştirilmiş bir arabirimdir. Programlama dillerinde sıkça karşımıza çıkan  Object Oriented  yaklaşımı da bu yapıya benzerdir. Object Oriented yaklaşımında kullandığımız nesneler yada sınıflar, DOM yapısına göre bir HTML sayfası içerisinde bulunan  etiketleri (tag)  kapsar. HTML sayfasında bulunan  <head>, <body>, <h1>, <img>  gibi etiketler birer DOM nesneleridir. DOM sayesinde  HTML  veya  XML  elemanları ile programlama veya script dilleri arasında haberleşme sağlayarak daha etkileşimli web siteler yapılabilmesini sağlanır. DOM,  Javascript, PHP, ASP, Java  vb. birçok dile destek verir. DOM'daki nesneye ulaşmak için 4 yol var: getElementById Sadece bir elementi getirir. O da id sini belirttiğiniz elementtir.

Explicit Wait

Explicit Wait Explicit wait, Web Driver a belli şartlarda ( Expected Conditions ) " ElementNotVisibleException " hatası vermeden önce en çok ne kadar beklemesi gerektiğini söyler. Explicit wait kullanırken " ExpectedCondtions " ı da kullanmalıyız ya da belirttiğimiz durumu Fluent Wait kullanarak ne kadarda bir kontrol edeceğimizi belirtmeliyiz .  public class AppTest { protected WebDriver driver; @Test public void tutorials() throws InterruptedException { System.setProperty ("webdriver.chrome.driver",".\\chromedriver.exe" ); driver = new ChromeDriver(); WebDriverWait wait=new WebDriverWait(driver, 20); String eTitle = "Blogger.com - Benzersiz, göz alıcı bir blog hazırlayın. Hizmetimiz ücretsizdir ve kullanımı kolaydır."; String aTitle = "" ; // launch Chrome and redirect it to the Base URL driver.get("https://www.blogger.com/about/?r=1-null_user" ); //Maximizes the browser window driver.