2009-03-16 19 views
35

Selenium'u kullanarak bazı testler yazmaya çalıştığım bir GWT uygulamasına sahibim.XPath kullanarak yalnızca görünen öğeleri nasıl seçerim?

Testler için sayfadaki öğeleri tanımlamak üzere XPath kullanıyorum. id kullanmak, id değerleri GWT tarafından otomatik olarak oluşturulduğu için çalışmaz ve değiştirilebilir. Ben şöyle onların etiketlerle düğmeleri bulabildiğim fark edince İşler iyi gitmeye başladım:

//button[.='OK'] 

Ancak, ben sorunları yaşamaya başladı birden testler başladı. Sorunun, Javascript tarafından oluşturulan ve gizli <div> öğelerinde HTML'de kaldığı GWT uygulamasının tüm farklı "sayfalarının" olduğunu fark ettim. Bu, Selenium testlerimin bazen geçerli görünümde görünen düğme yerine gizli düğmelere tıklanması anlamına geliyordu. Firebug ile HTML incelenmesi

, GWT onların style niteliğine display: none ekleyerek <div> unsurları gizler gibi görünüyor. Bu aşağıdaki gibi tüm gizli Tamam düğmelerini bulabilirsiniz anlamı:

//div[contains(@style,'display: none')]//button[.='OK'] 

Bu style yılında display: none sahip olarak gizlidir bir atası <div> sahip düğmeler yani tüm gizli Tamam düğmelerini bulacaksınız.

Sorum şu: Yalnızca görünen OK düğmelerini bulmak için XPath'ı nasıl kullanırım? styledisplay: none ile <div> öğeye sahip olmayan düğmeleri nasıl bulabilirim?

cevap

46

Bu çalışması gerekir:

.//button[.='OK' and not(ancestor::div[contains(@style,'display:none')]) 
and not(ancestor::div[contains(@style,'display: none')])] 

DÜZENLEME:

basit ve daha verimli ifade aşağıda:

//div[not(contains(@style,'display:none'))]//button[.='OK'] 

düzgün çalışmıyor her düğme görünür olduğu için en az bir div sahip olduğundan atalarında.

+0

bulacaksınız. Çok teşekkürler. –

+1

Domuz ağacında saklanmayan başka bir div varsa son bir çalışma yapılmaz:

Fortega

+0

@Fortega ve etrafındaki metinde söylenir –

12

Selenium 2 Webdriver, bize bu sorunla ilgilenen isDisplayed() yönteminin seçeneğini sunar. Selenyum katkıda bulunanlar tarafından güzel bir çalışma.

+1

Ekran gizli özniteliği, öğe değil, üst öğede ise bu işe yarar mı? –

+2

Evet, ancak belirli bir öğe için bunu kontrol etmeniz gerekiyor, tüm koleksiyona uygun olamaz. – sitnarf

+1

Dikkat edin Dikkat edin; öğeler, öğelerin alınırken ('' ile bul * ') ve' isDisplayed() 'kullanılarak görünürlüğünün kontrol edilmesi arasında değiştirildiği zaman, bu durum 'StaleElementReferenceException' istisnalarını artırabilir. – Blaise

-3
//div[contains(@style,'display: block')] 

Bu kod görünür eleman XPath bu kadar

İlgili konular