Web sayfamda adlı div
bir class
ad var Test
.
Nasıl bulabilirim XPath
?
Web sayfamda adlı div
bir class
ad var Test
.
Nasıl bulabilirim XPath
?
Yanıtlar:
Bu seçici çalışmalıdır, ancak uygun işaretlemenizle değiştirirseniz daha verimli olur:
//*[contains(@class, 'Test')]
Veya aranan elementin bir olduğunu bildiğimiz için div
:
//div[contains(@class, 'Test')]
Ancak bu, class="Testvalue"
veya gibi vakalarla da eşleşeceğinden class="newTest"
, @ Tomalak'ın yorumlarda sağlanan sürümü daha iyidir :
//div[contains(concat(' ', @class, ' '), ' Test ')]
Doğru şekilde eşleşeceğinden emin olmak istiyorsanız, sınıf adının etrafındaki başıboş boşluk karakterlerini temizlemek için normalleştirme alanı işlevini de kullanabilirsiniz (@Terry tarafından belirtildiği gibi):
//div[contains(concat(' ', normalize-space(@class), ' '), ' Test ')]
Belgedeki her bir öğeyi belirtilen koşul için aramak istemiyorsanız, tüm bu sürümlerde, * öğesinin en iyi şekilde eşleştirmek istediğiniz öğe adıyla değiştirilmesi gerektiğini unutmayın.
//div[contains(concat(' ', @class, ' '), ' Test ')]
- Sizinki de kısmi eşleşmeler yapacak.
En kolay yol ..
//div[@class="Test"]
<div class="Test">
Açıklandığı gibi bulmak istediğinizi varsayarsak .
//
sadece kullanmıyor /
.
SADECE doğru yolu XPath ile bunu yapmak için:
//div[contains(concat(" ", normalize-space(@class), " "), " Test ")]
İşlev normalize-space
, boşlukları takip eden ve takip eden boşlukları sıyırır ve ayrıca boşluk karakterleri dizilerini tek bir boşlukla değiştirir.
Bu Xpath sorgularının çoğuna ihtiyaç duymazsanız, CSS seçicilerinin XPath sorgularına göre okunması ve yazılması genellikle çok daha kolay olduğu için CSS seçicilerini XPath'a dönüştüren bir kitaplık kullanmak isteyebilirsiniz. Örneğin, bu durumda, her ikisini div[class~="Test"]
ve div.Test
aynı sonucu elde etmek için kullanabilirsiniz .
Bulabildiğim bazı kütüphaneler:
Tomalak'ın uzun zaman önce meder'in cevabına bir yorum olarak sağladığı için bunu sadece cevap olarak veriyorum
//div[contains(concat(' ', @class, ' '), ' Test ')]
concat(' ', normalize-space(@class), ' ')
her türlü beyaz boşluk karakterini de hesaba katmaya ne dersiniz ?
//div[contains(concat(' ', @class, ' '), ' Test ')]/chid
çocukları seçmiyor?
Önceki cevaplardan faydalı bir işlev yapılabilir:
function matchClass($className) {
return "[contains(concat(' ', normalize-space(@class), ' '), ' $className ')]";
}
Ardından, işlev çağrısını sorgunuza tamamlayın.
bu örnek gibi öğeler bulabilirsiniz (tüm css öğeleri)
private By
allElementsCss = By.xpath(".//div[@class]");