2016-03-31 15 views
2

Sorunum, web sayfamda bir onay kutusu öğesi bulmaktır. Seçilen dil olarak Eclipse, TestNG ve Java ile Selenium webdriver kullanıyorum.Bu web bağlantısını Selenium Webdriver'da nasıl bulurum?

onay kutusu elemanı incelenmesi aşağıdaki bana veriyor:

Ben dize Chrome tarayıcısında eleman kopyalanmış xpath aşağıdaki xpath kodunu kullanarak denedim
<input type="checkbox" data-privid="13" data-priviligeeid="406"> 

. Kabul edilecek tırnak işaretleri için kaçış karakterlerini ekledim:

WebElement ChangeButton = driver.findElement(By.xpath("[@id=\"privs\"]/div[1]/div[2]/label/input")); 

Ancak bunu yapmak ChangeButton'u boş bırakır. Bu da işe yaramadı

ArrayList<WebElement> inputs =(ArrayList<WebElement>)driver.findElements(By.tagName("input"));  

     if(inputs != null) { 

      for(WebElement checkbox : inputs) { 
       String attribute = checkbox.getAttribute("data-privid"); 
       System.out.println(attribute); 

       .... 
} 
} 

nitelik herhangi bir değer alır geçmediği için:

Ben de ben bir özgül veri privid değeri bulana kadar bir dizi döngü çalıştı.

Bunu nasıl çözebilirim?

DÜZENLEME: Bu çözüldü!

Çözümlerinizin ilk başta benim için çalışmadığı nedeni, bir sınıfa ait yöntemlerde gezinme ve ikinci bir sınıfta yakalanan web öğesi olmasından kaynaklanıyordu. Onları bir xml dosyasında birleştirmeyi denedim, ancak herhangi bir nedenle konumlandırıcı sınıfı kendi işini yapmaya çalıştığında yanlış url sonucuna vardım. Cevap verdiğiniz için herkese teşekkür ederim. css konum belirleyicileri ile gittim ve güzel çalışıyor.

//input[@type='checkbox' and @data-privid='13'] 

XPath

altına

cevap

0

gerek yok XPath kullanmak. CSS seçiciler daha kullanışlıdır. Bu deneyin: "[@id=\"privs\"]/div[1]/div[2]/label/input" geçerli değil

driver.findElement(By.cssSelector("input[type='checkbox'][data-privid='13']")); 
+0

Bu ÇOK kullanışlı görünüyor. Maalesef henüz çalışmaya başlayamıyorum (hala element özelliklerine ulaşamıyorum), fakat bu yolu kesinlikle keşfedeceğim. Ben de testlerimin ne kadar kırılgan olabileceğinden dolayı xpath kullanmamayı tercih ederim. Teşekkürler Kim! –

+0

Aynı şeyi XPath içinde de ifade edebilirsiniz: 'driver.findElement (By.xpath (" // input [@ type = 'checkbox'] [@ data-privid = '13 '] "));'. Neredeyse aynı, ama içinde daha fazla '/' ve '' karakterleri var. Özellikle birden fazla sınıf öznitelikleriyle uğraştığınızda, XPath, # $ & § içinde CSS seçicilerine kıyasla gerçek bir acı olabilir. XPath'in CSS'den daha iyi olduğunu düşündüğüm tek örnek, bir HTML etiketindeki metin içeriğinin girilmesi gerektiğidir. Bu, Selenium'un oldukça basit CSS uygulamasıyla gerçekleştirilemez. –

0

deneyin o size yardımcı olacaktır Umut :)

+0

Hala işe yaramayabilirim ama cevabın Kim'e hatırlatıyor, bu yüzden bana bir miktar yardım veriliyor. Teşekkür ederim! –

0

Kişisel xpaht ifadesi.
Eğer id="privs" bir unsur bu olurdu ilk adımda bulmaya görünüyor: "*[@id='privs']" veya (daha iyi bu unsur div ise) "div[@id='privs']"

Sonra xpath aşağıdaki gibi görünebilir:

"div[@id='privs']/div[1]/div[2]/label/input"

+0

Ah, çok teşekkürler!Evet, oradaki alıntı işaretlerini tıklamaya çalışmak garip görünce düşündüm. Xpath kodunu denedim ama maalesef hala çalışmıyor. Başka bir şey eksik olmalı diye düşünüyorum, belki de sayfaya ulaştıktan sonra ve eleman aramadan önce test çalışmasını bir süre duraklatmam gerekiyor mu? Otomatik test yazımı için çok yeni. Muhtemelen, kırılganlık nedeniyle xpath kullanmaktan kaçınmak istediğimi fark ettim, ama bunu yapmak zorunda kaldığım zaman işe almak iyi olacaktır. :) –

İlgili konular