xpath axes dynamic xpath selenium webdriver
Bu Eğitim, Selenium WebDriver'da Dinamik XPath için XPath Eksenlerini Kullanılan Çeşitli XPath Eksenlerinin, Yapının Örnekleri ve Açıklamasının Yardımıyla Açıklar:
Önceki eğitimde, XPath fonksiyonları ve elementi tanımlamadaki önemi hakkında bilgi edindik. Bununla birlikte, birden fazla öğe çok benzer yönelim ve adlandırmaya sahip olduğunda, öğeyi benzersiz bir şekilde tanımlamak imkansız hale gelir.
=> Mükemmel Selenium Eğitim Kılavuzuna Buradan Bakabilirsiniz.
Ne öğreneceksin:
XPath Eksenlerini Anlamak
Yukarıda belirtilen senaryoyu bir örnek yardımıyla anlayalım.
'Düzenleme' metnine sahip iki bağlantının kullanıldığı bir senaryo düşünün. Bu tür durumlarda, HTML’nin düğüm yapısını anlamak uygun hale gelir.
Lütfen aşağıdaki kodu not defterine kopyalayıp yapıştırın ve .htm dosyası olarak kaydedin.
Edit Edit
Kullanıcı arayüzü aşağıdaki ekran gibi görünecektir:
Sorun bildirimi
S # 1) XPath İşlevleri bile öğeyi tanımlayamadığında ne yapmalı?
Cevap: Böyle bir durumda, XPath Fonksiyonları ile birlikte XPath Eksenlerini kullanırız.
Bu makalenin ikinci bölümü, öğeyi tanımlamak için hiyerarşik HTML biçimini nasıl kullanabileceğimizle ilgilidir. XPath Eksenleri hakkında biraz bilgi alarak başlayacağız.
S # 2) XPath Eksenleri nedir?
Cevap: Bir XPath eksenleri, düğüm kümesini geçerli (bağlam) düğüme göre tanımlar. O ağaçtaki düğüme göre olan düğümü bulmak için kullanılır.
S # 3) Bağlam Düğümü nedir?
Cevap: Bir bağlam düğümü, XPath işlemcisinin şu anda baktığı düğüm olarak tanımlanabilir.
Selenyum Testinde Kullanılan Farklı XPath Eksenleri
Aşağıda listelenen on üç farklı eksen vardır. Ancak Selenium testi sırasında hepsini kullanmayacağız.
- Ata : Bu eksen, bağlam düğümüne göre tüm ataları gösterir ve ayrıca kök düğüme kadar ulaşır.
- ata veya benlik: Bu, bağlam düğümünü ve bağlam düğümüne göre tüm ataları gösterir ve kök düğümü içerir.
- özellik: Bu, bağlam düğümünün niteliklerini gösterir. “@” Sembolü ile temsil edilebilir.
- çocuk: Bu, bağlam düğümünün çocuklarını gösterir.
- aşağı doğru: Bu, bağlam düğümünün çocuklarını, torunlarını ve çocuklarını (varsa) gösterir. Bu, Nitelik ve Ad Alanını GÖSTERMEZ.
- soy veya kendilik: Bu, bağlam düğümünün bağlam düğümünü ve alt öğelerini, torunları ve çocuklarını (varsa) gösterir. Bu, özniteliği ve ad alanını GÖSTERMEZ.
- takip etme: Bu, görünen tüm düğümleri gösterir sonra HTML DOM yapısındaki bağlam düğümü. Bu, nesli, özniteliği ve ad alanını GÖSTERMEZ.
- aşağıdaki kardeş: Bu, tüm kardeş düğümleri (bağlamsal düğüm ile aynı ebeveyn) gösterir. görünmek HTML DOM yapısındaki bağlam düğümünden sonra. Bu, nesli, özniteliği ve ad alanını GÖSTERMEZ.
- ad alanı: Bu, bağlamsal düğümün tüm isim-alanı düğümlerini gösterir.
- ebeveyn: Bu, bağlamsal düğümün ebeveynini gösterir.
- önceki: Bu, görünen tüm düğümleri gösterir önce HTML DOM yapısındaki bağlam düğümü. Bu, nesli, özniteliği ve ad alanını GÖSTERMEZ.
- preceding-sibling: Bu, görünen tüm kardeş düğümleri (bağlamsal düğüm ile aynı ebeveyn) gösterir önce HTML DOM yapısındaki bağlam düğümü. Bu, nesli, özniteliği ve ad alanını göstermez.
- öz: Bu, bağlam düğümünü gösterir.
XPath Eksenlerinin Yapısı
XPath Eksenlerinin nasıl çalıştığını anlamak için aşağıdaki hiyerarşiyi düşünün.
Yukarıdaki örnek için aşağıda basit bir HTML koduna bakın. Lütfen aşağıdaki kodu not defteri düzenleyicisine kopyalayıp yapıştırın ve .html dosyası olarak kaydedin.
Animal
Vertebrate
Fish
Mammal
Herbivore
Carnivore
Lion
Tiger
Other
Invertebrate
Insect
Crustacean
Sayfa aşağıdaki gibi görünecektir. Misyonumuz, öğeleri benzersiz bir şekilde bulmak için XPath Eksenlerinden yararlanmaktır. Yukarıdaki grafikte işaretlenen öğeleri belirlemeye çalışalım. Bağlam düğümü 'Memeli'
# 1) Ata
Günlük: Üst öğeyi bağlam düğümünden tanımlamak için.
XPath # 1: // div (@ class = ’Memeli’) / ancestor :: div
XPath “// div (@ class =’ Mammal ’) / ancestor :: div” iki eşleşen düğüm atar:
- Omurgalılar, “Memeli” nin ebeveyni olduğu için aynı zamanda atası olarak kabul edilir.
- Hayvan, 'Memeli' nin ebeveyninin ebeveyni olduğu için bir ata olarak kabul edilir.
Şimdi, sadece 'Hayvan' sınıfı olan bir öğeyi tanımlamamız gerekiyor. XPath'i aşağıda belirtildiği gibi kullanabiliriz.
XPath#2: //div(@class='Mammal')/ancestor::div(@class='Animal')
'Hayvan' metnine ulaşmak isterseniz aşağıdaki XPath kullanılabilir.
# 2) Ata veya benlik
Günlük: Bağlam düğümünü ve üst öğeyi bağlam düğümünden tanımlamak için.
XPath # 1: // div (@ class = ’Memeli’) / ata-veya-öz :: div
Yukarıdaki XPath # 1, üç eşleşen düğüm atar:
- Hayvan (Ata)
- Omurgalı
- Memeli (Kendi)
# 3) Çocuk
Günlük: 'Mammal' bağlam düğümünün alt öğesini tanımlamak için.
XPath # 1: // div (@ class = 'Memeli') / child :: div
XPath # 1 'Mammal' bağlam düğümünün tüm alt öğelerini tanımlamaya yardımcı olur. Belirli bir alt öğeyi almak istiyorsanız, lütfen XPath # 2'yi kullanın.
XPath # 2: // div (@ class = ’Memeli’) / child :: div (@ class = ’Otobur’) / h5
# 4) Torun
Günlük: Bağlam düğümünün çocuklarını ve torunlarını tanımlamak için (örneğin: 'Hayvan').
deneyimli için oracle sql mülakat soruları
XPath # 1: // div (@ class = ’Animal’) / descendant :: div
Hayvan hiyerarşinin en üstteki üyesi olduğu için, tüm alt ve alt öğeler vurgulanmaktadır. Ayrıca referansımız için bağlam düğümünü değiştirebilir ve düğüm olarak istediğimiz herhangi bir öğeyi kullanabiliriz.
# 5) Nesli veya kendi
Günlük: Elementin kendisini ve soyundan gelenleri bulmak için.
XPath1: // div (@ class = ’Animal’) / descendant-or-self :: div
Soy ve soy veya ben arasındaki tek fark, torunları vurgulamanın yanı sıra kendini vurgulamasıdır.
# 6) Takip
Günlük: Bağlam düğümünü takip eden tüm düğümleri bulmak için. Burada bağlam düğümü, Mammal öğesini içeren div'dir.
XPath: // div (@ class = ’Memeli’) / following :: div
Aşağıdaki eksenlerde, alt veya alt öğe olsun, bağlam düğümünü takip eden tüm düğümler vurgulanmaktadır.
# 7) Aşağıdaki kardeş
Günlük: Aynı ebeveyni paylaşan ve bağlam düğümünün kardeşi olan bağlam düğümünden sonra tüm düğümleri bulmak için.
XPath: // div (@ class = ’Memeli’) / following-sibling :: div
Aşağıdaki ve sonraki kardeş arasındaki en büyük fark, aşağıdaki kardeşin bağlamdan sonra tüm kardeş düğümlerini alması, ancak aynı zamanda aynı ebeveyni paylaşmasıdır.
# 8) Önceki
Günlük: Bağlam düğümünden önce gelen tüm düğümleri alır. Ebeveyn veya büyükbaba düğümü olabilir.
Burada bağlam düğümü Omurgasızdır ve yukarıdaki görüntüde vurgulanan çizgiler, Omurgasız düğümünden önce gelen tüm düğümlerdir.
# 9) Önceki kardeş
Günlük: Bağlam düğümüyle aynı ebeveyni paylaşan ve bağlam düğümünden önce gelen kardeşi bulmak için.
Bağlam düğümü Omurgasız olduğundan, vurgulanan tek öğe Omurgalı'dır çünkü bu ikisi kardeştir ve aynı ebeveyn 'Hayvan' ı paylaşır.
# 10) Ebeveyn
Günlük: Bağlam düğümünün üst öğesini bulmak için. Bağlam düğümünün kendisi bir ataysa, bir üst düğüme sahip olmaz ve eşleşen düğümler getirmez.
Bağlam Düğümü # 1: Memeli
XPath: // div (@ class = ’Memeli’) / parent :: div
Bağlam düğümü Mammal olduğundan Omurgalılar ile birlikte öğe, Memeli'nin ebeveyni olduğu için vurgulanmaktadır.
Bağlam Düğümü # 2: Hayvan
XPath: // div (@ class = ’Hayvan’) / parent :: div
Hayvan düğümünün kendisi ata olduğu için herhangi bir düğümü vurgulamayacak ve dolayısıyla Eşleşen düğüm bulunamadı.
# 11) Öz
Günlük: Bağlam düğümünü bulmak için self kullanılır.
Bağlam Düğümü: Memeli
XPath: // div (@ class = 'Memeli') / self :: div
Yukarıda görebileceğimiz gibi, Mammal nesnesi benzersiz bir şekilde tanımlanmıştır. Aşağıdaki XPath'i kullanarak 'Mammal' metnini de seçebiliriz.
XPath: // div (@ class = 'Memeli') / self :: div / h4
Önceki ve Sonraki Eksenlerin Kullanımları
Hedef öğenizin bağlam düğümünden kaç etiket önde veya geride olduğunu bildiğinizi varsayalım, tüm öğeleri değil, o öğeyi doğrudan vurgulayabilirsiniz.
Örnek: Önceki (dizinle)
Bağlam düğümümüzün 'Diğer' olduğunu varsayalım ve 'Memeli' öğesine ulaşmak istiyoruz, bunu yapmak için aşağıdaki yaklaşımı kullanacağız.
İlk adım: Herhangi bir indeks değeri vermeden öncekini kullanın.
XPath: // div (@ class = 'Diğer') / preceding :: div
Bu bize 6 eşleşen düğüm verir ve biz sadece bir hedeflenmiş düğüm 'Mammal' istiyoruz.
İkinci adım: Dizin değerini (5) div öğesine verin (bağlam düğümünden yukarı doğru sayarak).
XPath: // div (@ class = 'Diğer') / preceding :: div (5)
Bu şekilde 'Memeli' öğesi başarıyla tanımlanmıştır.
yeni ürünler için nasıl test cihazı olunur
Örnek: takip etme (dizinle)
Bağlam düğümümüzün 'Memeli' olduğunu varsayalım ve 'Kabuklu' öğesine ulaşmak istiyoruz, bunu yapmak için aşağıdaki yaklaşımı kullanacağız.
İlk adım: Aşağıdakileri herhangi bir indeks değeri vermeden kullanın.
XPath: // div (@ class = ’Memeli’) / following :: div
Bu bize 4 eşleşen düğüm verir ve yalnızca bir hedeflenen düğüm olan 'Crustacean' istiyoruz
İkinci adım: Dizin değerini (4) div öğesine verin (bağlam düğümünden ileriye doğru sayın).
XPath: // div (@ class = 'Diğer') / following :: div (4)
Bu şekilde 'Crustacean' unsuru başarıyla tanımlanmıştır.
Yukarıdaki senaryo ile yeniden oluşturulabilir önceki-kardeş ve takip eden kardeş yukarıdaki yaklaşımı uygulayarak.
Sonuç
Nesne Tanımlama, herhangi bir web sitesinin otomasyonundaki en önemli adımdır. Nesneyi doğru öğrenme becerisini edinebilirseniz, otomasyonunuzun% 50'si yapılır. Öğeyi tanımlamak için mevcut konumlayıcılar varken, konumlandırıcıların bile nesneyi tanımlayamadığı bazı durumlar vardır. Böyle durumlarda farklı yaklaşımlar uygulamalıyız.
Burada, öğeyi benzersiz şekilde tanımlamak için XPath İşlevlerini ve XPath Eksenlerini kullandık.
Bu makaleyi, hatırlanması gereken birkaç noktayı not ederek bitiriyoruz:
- Üst öğe olan bağlam düğümünün bağlam düğümüne 'üst' eksenleri uygulamamalısınız.
- Üst öğe olan bağlam düğümünün bağlam düğümüne 'ebeveyn' eksenleri uygulamamalısınız.
- Alt öğe olan bağlam düğümünün bağlam düğümüne 'alt' eksenler uygulamamalısınız.
- Üst öğe olan bağlam düğümünün bağlam düğümüne 'alt' eksenler uygulamamalısınız.
- Bağlam düğümüne 'aşağıdaki' eksenleri uygulamamalısınız, bu HTML belge yapısındaki son düğümdür.
- Bağlam düğümüne 'önceki' eksenleri uygulamamalısınız, bu HTML belge yapısındaki ilk düğümdür.
Mutlu Öğrenme !!!
=> Özel Selenium Eğitim Eğitim Serisi İçin Burayı Ziyaret Edin.
Önerilen Kaynaklar
- Selenyumda Dinamik XPath İçin XPath İşlevleri
- Salatalık Selenium Eğitimi: Salatalık Java Selenium WebDriver Entegrasyonu
- Selenyum Konumlayıcılar: Selenyumda XPath Kullanarak Web Öğelerini Tanımlayın (Örnekler)
- Selenium WebDriver'a Giriş - Selenium Eğitimi # 8
- ChromeDriver Selenium Eğitimi: Chrome'da Selenium Webdriver Testleri
- İlk WebDriver Komut Dosyamızın Uygulanması - Selenium WebDriver Eğitimi # 10
- 30+ En İyi Selenyum Öğreticisi: Gerçek Örneklerle Selenyum Öğrenin
- Selenium Komut Dosyasında Web Tablolarını, Çerçeveleri ve Dinamik Öğeleri Kullanma - Selenium Eğitimi # 18