2016-04-14 31 views
1

Selenium Webdriver uygulamasını Java ile kullanarak Otomasyon üzerinde çalışıyorum. Öğeleri bulmak için XPath kullanıyorum. Bu iyi bir uygulama mı?Öğeleri iyi bir uygulama bulmak için mutlak XPath kullanıyor musunuz? Hayır ise, öğeleri bulmak için başka etkili bir yolu var mı?

+0

Evet, herkes böyle yapıyor. –

+1

@DavidWallace Hayır, öyle değil. Ve mutlak yol ile 'xpath 'kullanarak yapabileceğiniz en kötü şeydir. – Guy

+0

@Guy o zaman belki de ne yaptığınızı açıklayan bir cevap yazmalısınız. Çalıştığım tüm profesyonel test uzmanları bunu ya da buna benzer bir şey yaptı. –

cevap

0

XPath seçicilerini kullanmanız veya kullanmamanız, belge yapınızın ne olması gerektiğine bağlı olarak değişir.

Örneğin, formdaki 'submit' (gönder) düğmesini tıklatmak, ancak gönderme düğmesinin nerede olduğuyla ilgilenmek istemiyorsanız, bir öğeye kimliğine veya adına başvurmak iyi bir fikir ve ortak uygulamadır. Öte yandan, sayfada başka bir şeyin alt öğesi olması gereken bir öğe için test ediyorsanız, Xpath'i kullanmak gayet iyi.

1

Genel kurallar yoktur. Her zaman test edilen siteye bağlıdır.

Öğelerinizi bulmanın en iyi yolu Kimlik'dir. Bu her zaman mümkün değildir, özellikle test edilen site sizin kontrolünüz altında değilse ve id’leri html’ye kendiniz ekleyemezsiniz. tarafından belirleniyor Ad, kötü değil, ancak sitedeki siteye bağlı olarak, her sayfada/çerçevede benzersiz olmayabilir. iyi bir seçim olabilir tarafından linktext veya PartialLinkText arama, <a> ve <button> öğeleri için

(! "Ad" HTML name niteliğini değil, etiket adı anlamına geldiğini unutmayın), ancak yalnızca sitenizin altında Test başka bir dile çevrilemez, çünkü bu genellikle tüm link metinlerini de değiştirir.

Bulma CSS seçicisi, XPath kadar güçlüdür, ancak özellikle sınıf isimleriyle uğraşırken genellikle çok daha kısa ve daha kompakttır.

Örnek (tam olarak aynı şeyi ifade eden XPath vs CSS): Bir HTML öğesinin içeriği olarak metin için arama yaparken

driver.findElement(By.cssSelector(".ecp-cartItemText")); 
driver.findElement(By.xpath("//*[@class='ecp-cartItemText' or contains(@class,' ecp-cartItemText ') or substring(@class,1,17)='ecp-cartItemText ' or substring(@class,string-length(@class)-16)=' ecp-cartItemText']")); 

Sadece, CSS (Selenyum bulunan hiçbir XQuery'yi yapmak mümkün değildir !) ve XPath kullanmalısınız.

Örnek:

//button[@type='button']//span[text()='Close'] 

Ayrıca zaten XPath eksenler boyunca web öğeleri bulunan göreli arama için, bazen XPath kullanmak faydalı olabilir.

Örnek:

element.findElement(By.xpath("following-sibling::p[1]/strong")); 

Orada XPath kaçınılmazdır diğer durumlarda olabilir, ama herhangi karşılaşmadım. Bu yüzden sadece gerektiğinde XPath kullanın! Genellikle daha iyi yollar vardır.

+0

Belki de okunabilirlik/süreklilik/istikrarın önemi hakkında biraz? –

2

Mutlak XPath

Mutlak XPath kök düğüm veya eğik çizgi (/) ile başlar. Mutlak kullanma avantajı, elemanı çok hızlı tanımlar. Burada bir dezavantaj varsa, herhangi bir şey ters giderse veya başka bir etiket eklendiyse, bu yol artık çalışmayacaktır.

Örnek: biz

html/baş/vücut/tablo olarak tanımlanan Yol/tbody/tr/

Bağıl XPath

inci göreceli xpath ise Yolun, seçiminizin düğümünden başladığı yer - kök düğümden başlaması gerekmez.

O Çift eğik çizgi (//)

Dizim başlar:

// tablo/tbody/tr/akraba xpath, sen don kullanmanın

Advantage inci Uzun xpath'dan bahsetmen gerek, ordan başlayarak ya da aradan başlayabilirsin. Buradaki dezavantaj, kısmi yolu belirtmedikçe elemanın tanımlanmasında daha fazla zaman alacaktır (tam yol).