xpath functions dynamic xpath selenium
Bu Öğretici, Örneklerle Öğeleri Tanımlamada XPath İşlevlerinin Kullanımını Açıklar:
Herhangi bir web sitesini otomatikleştirmeden önce, üzerinde herhangi bir işlem gerçekleştirmeden önce nesneyi doğru bir şekilde tanımlamamız gerekir. Öğeyi tanımlamanın en kolay yolunun Kimlik, Ad, Bağlantı, Sınıf gibi öznitelikler veya öğenin bulunduğu etiketle kullanılabilen diğer benzersiz öznitelikler olduğunu biliyoruz.
Bu, yalnızca bu nitelikler mevcut olduğunda ve / veya benzersiz olduğunda mümkündür, böylece nesne doğru şekilde tanımlanır.
=> Selenium Yeni Başlayanlar Kılavuzuna Bir Göz Atın.
Ne öğreneceksin:
XPath İşlevlerine Genel Bakış
Özniteliklerin hazır olmadığı senaryoyu tartışalım.
Sorun bildirimi
ID, Name, Class, Link, vb. Gibi yer belirleyiciler element etiketinde yoksa elementi nasıl tanımlarız?
Bu, verilen örnekle açıkça anlaşılabilir:
Giriş Twitter
Yukarıdaki ekran görüntüsünde görebileceğiniz gibi, 'Twitter'a Giriş Yap' başlığının kendisine eklenmiş hiçbir özelliği yoktur. Bunu söyledikten sonra, bu öğeyi tanımlamak için Kimlik, Sınıf, Bağlantı veya Ad gibi konumlandırıcılardan hiçbirini kullanamayız.
Windows'ta bir .dat dosyası nasıl açılır
Firefox aracının Firepath eklentisi aşağıdaki XPath'i oluşturdu:
// * (@ id = ’page-container’) / div / div (1) / h1
Dinamik olarak değişebileceğinden, sayfa yapısı veya kimlik olarak yukarıdaki XPath'in kullanılmasını önermiyoruz. Bu dengesiz XPath'i kullanırsak, XPath'i daha sık değiştirmemiz gerekebilir ve bu da bakımı daha çok zaman alır. Bu, genel XPath ifadesini id, sınıf, ad veya bağlantı gibi konumlayıcılarla kullanamayacağımız bir durumdur.
Çözüm
Metne Göre XPath İşlevlerini Kullanarak Öğeyi Tanımlama
Görünür 'Twitter'da Oturum Açın' metnine sahip olduğumuzdan, aşağıdakilerden yararlanırız XPath fonksiyonları öğeyi benzersiz şekilde tanımlamak için.
- içerir () (Metinle)
- şununla başlar () (Metinle)
- Metin()
Contains (), begin-with () ve text () gibi XPath işlevleri, 'Twitter'a giriş yap' metni yardımıyla kullanıldığında, öğeyi doğru bir şekilde tanımlamamıza yardımcı olur ve aynı şekilde daha fazla işlem gerçekleştirilebilir.
# 1) İçerir () Yöntem:
Sözdizimi: 'Twitter'da Oturum Aç' web öğesini bulmak için, contains () yöntemini içeren aşağıdaki XPath ifadelerinden herhangi birini kullanın.
Metne Göre
- // h1 (içerir (text (), ’Giriş yap’))
- // h1 (içerir (text (), 'Twitter'da ’))
Not: 1 eşleşen düğüm, web öğesinin başarıyla tanımlandığını gösterir.
Yukarıdaki örnekten, contains () yönteminin öğeyi doğru bir şekilde tanımlamak için mutlak (tam) metne ihtiyaç duymadığı açıktır. Kısmi metin, onu doğru bir şekilde tanımlamak için yeterlidir. Ancak, seçilen kısmi metin benzersiz olmalıdır. Kullanıcı, sayfanın yönü contains () yöntemi yardımıyla değiştirilse bile öğeyi kolayca tanımlayabilir.
Lütfen, 'Twitter'da Oturum Açın' mutlak metnini contains () yöntemi ile kullansanız bile, öğenin doğru bir şekilde tanımlanacağını unutmayın.
# 2) () yöntemiyle başlar:
Sözdizimi: 'Twitter'da Oturum Açın' web öğesini bulmak için, begin-with () yöntemine sahip aşağıdaki örnek XPath ifadelerini kullanın.
Metne Göre
- // h1 (başlar-with (text (), 'Giriş yap'))
- // h1 (başlar-with (text (), ’Giriş yap’))
Yukarıdaki örnekten, XPath işlevlerinin, öğeyi benzersiz bir şekilde tanımlamak için görünür metnin en azından ilk sözcüğünü ('Log') gerektirdiği açıktır. Kısmi metin üzerinde de çalışır ve kısmen görünen metnin ilk kelimesini dahil etmezsek başarısız olur.
Lütfen start-with () yöntemiyle 'Twitter'da Oturum Açın' mutlak metnini kullansanız bile, öğenin doğru bir şekilde tanımlanacağını unutmayın.
() İle başlayanlar için geçersiz XPath: // h1 (başlar-with (text (), 'Twitter'da ’))
Not: Hiçbir eşleşen düğüm, web öğesinin tanımlanmadığını gösterir.
# 3) Metin () yöntemi:
Sözdizimi: 'Twitter'da Oturum Aç' web öğesini bulmak için, text () yöntemine sahip aşağıdaki XPath ifadesini kullanın.
Bu ifadede, başlangıç etiketi arasında bulunan mutlak metni kullanırız. İçerir () ve bununla başlar () ile yaptığımız gibi kısmi Xpath ile text () işlevini kullanırsak, öğeyi bulamayız.
Metin için geçersiz Xpath ():
Özniteliğe Göre XPath İşlevlerini Kullanarak Öğeyi Tanımlama
Kapsayıcı etiketinde bazı benzersiz olarak tanımlanmış öznitelik değerleri mevcut olduğunda, öznitelikle birlikte XPath işlevlerini (içerir veya başlar) kullanırız. Niteliklere “@” sembolü kullanılarak erişilir.
Bu, verilen ile açıkça anlaşılabilir misal:
Giriş Google
# 1) İçerir () Yöntem:
Sözdizimi: XPath işlevi yardımıyla 'Kendimi Şanslı Hissediyorum' düğme öğesini benzersiz şekilde tanımlamak için, öznitelik yardımıyla içerir ().
(i) Değer özelliğine göre:
- // girdi (içerir (@ değer, 'Duygu'))
- // girdi (içerir (@ değer, 'Şanslı'))
Yukarıdaki görüntülerden, özellik değerini 'Feeling' veya 'Lucky' ile contains () yöntemiyle kullanmanın, öğeyi benzersiz şekilde tanımlayacağı anlaşılmaktadır. Bununla birlikte, Değer özniteliğinin tüm içeriğini kullansak bile, öğeyi doğru bir şekilde tanımlayacağına dikkat etmek önemlidir.
(ii) İsim özelliğine göre:
//input(contains(@name=’btnI’))
Şu özniteliğe sahip XPath işlevi için geçersiz durum:
Contains () ve begin-with () yöntemiyle kullanılacak özniteliği seçerken çok dikkatli olmamız gerekir. Öznitelik değeri benzersiz değilse, öğeyi benzersiz şekilde tanımlayamayız.
'Kendimi Şanslı Hissediyorum' düğmesini belirlerken 'tür' özelliğini alırsak, XPath çalışmayacağını varsayalım.
Eşleşen 2 düğüm, öğenin doğru bir şekilde tanımlanmadığını gösterir. Burada type özniteliği değeri benzersiz değildir.
# 2) () yöntemiyle başlar:
Özniteliğe sahip begin-with () yöntemi, daha sonraki kısım değişmeye devam ederken, niteliğin önceki kısmı sabit kalan öğeleri bulmamız gerektiğinde çok kullanışlıdır. Bu yaklaşım, nesneler özniteliklerinin değerini dinamik olarak değiştirdiğinde çok kullanışlıdır. Bu, benzer türde öğeleri yakalamak istiyorsak da kullanılabilir.
Git Facebook girişi
Kayıt formunun ilk metin kutusu olan “Ad” ve ikinci “Soyadı” metin kutusunu inceleyin.
İlk metin kutusu 'Ad' belirlenir.
İkinci metin kutusu 'Soyadı' belirlenir.
Facebook'a Kaydol için tanımlanan her iki metin kutusunda, kimlik özelliklerinin başlangıç kısmı değişmeden kalır.
Ad kimliği = 'u_0_2'
Soyadı kimliği = ’u_0_4”
Bu tür bir id özniteliği altındaki tüm öğeleri elde etmek için begin-with () özniteliğini kullanabileceğimiz senaryo budur. Lütfen bu iki alanı referans olarak aldığımızı unutmayın. Ancak, ekranda 'u_0_' ile başlayan kimliklere sahip daha fazla alan olabilir.
() İle başlar (Öznitelik kimliğine göre)
//input(starts-with(@id,”u_0_”))
Önemli Not: Burada tek tırnak yerine çift tırnak kullandık. Ancak tek tırnak işaretleri de başlangıç yöntemiyle işe yarayacaktır.
11 eşleşen düğüm, bu XPath'in bu kimlikler “u_0_” ile başlayan tüm öğeleri tanımladığını gösterir. Kimliğin son kısmı (ad için 2, Soyadı için 4, vb.), Öğeyi nasıl benzersiz bir şekilde tanımlayacağımızı belirler.
Bir listedeki benzer türdeki öğeleri toplamamız gereken yerlerde begin-with function özelliğini kullanabilir ve öğeyi benzersiz bir şekilde tanımlamak için bir genel yöntemde argümanı atlayarak bunlardan birini dinamik olarak seçebiliriz.
Başlama işlevini kendi yararımıza kullanmak için lütfen aşağıdaki örneği izleyin.
Basit kod:
/* Generic Method */ public void xpathLoc(String identifier){ //The below step identifies the element “First Name” uniquely when the argument is “2” WebElement E1=d1.findElement(By.xpath('//input(starts-with(@id,”u_0_”+identifier ))')); E1.sendKeys(“Test1”); /* This step enters the value of First Name as “Test 1” */ } /* Main Method */ public static void main(String() args) { xpathLoc(“2”); --- This step calls the xpathLoc() method to identify the first name. }
Not: Eclipse, çift tırnak kullanımına izin vermeyebilir. Dinamik XPath yapmak için farklı koda başvurmanız gerekebilir.
Örnek kod referans için verilmiştir. Kodu daha çok yönlü hale getirmek için, gerçekleştirmek istediğiniz tüm öğelere ve işlemlere ve girmek istediğiniz değerlere (metin alanları olması durumunda) sığacak şekilde geliştirebilirsiniz.
Sonuç
Bu makale, HTML DOM yapısındaki öğeleri benzersiz bir şekilde tanımlamak için XPath İşlevleri içerir (), başlar-ile () ve öznitelik ve metin içeren metin () işlevlerini nasıl kullanabileceğimizi açıkladı.
Aşağıda, XPath İşlevleri için çizebileceğimiz bazı gözlemler bulunmaktadır:
- Kısmi sabit görünür metin veya niteliği biliyorsanız, XPath'de 'içerir ()' yöntemini kullanın.
- İlk kısmi sabit görünür metni veya niteliği biliyorsanız, XPath'te 'ile başlar ()' yöntemini kullanın.
- Mutlak metin veya öznitelikle contains () ve begin-with () yöntemini de kullanabilirsiniz.
- Mutlak görünür metnin farkındaysanız, XPath'deki 'text ()' yöntemini kullanın.
- Kısmi metinle text () yöntemini kullanamazsınız.
- Başlangıç metni XPath'te kullanılmıyorsa veya başlangıç metni sürekli değişiyorsa, begin-with () yöntemini kullanamazsınız.
Bir sonraki eğitimde, mevcut web sayfasındaki öğelerin konumunu daha da geliştirmek için XPath Fonksiyonları ile XPath Eksenlerinden nasıl yararlanılacağını öğreneceğiz.
=> Kolay Selenyum Eğitim Serisini Okuyun.
Önerilen Kaynaklar
- Selenyum Konumlayıcılar: Selenyumda XPath Kullanarak Web Öğelerini Tanımlayın (Örnekler)
- Selenium Komut Dosyasında Web Tablolarını, Çerçeveleri ve Dinamik Öğeleri Kullanma - Selenium Eğitimi # 18
- Python Dizesi İşlevleri
- JMeter'de Xpath Extractor Son İşlemci
- Selenyum Örneklerle Metin Eğitimi ile Eleman Bul
- Salatalık Selenium Eğitimi: Salatalık Java Selenium WebDriver Entegrasyonu
- Kapsamlı Bir XPath Eğitimi - XML Yol Dili
- Selenium WebDriver'a Giriş - Selenium Eğitimi # 8