selenium
  • xpath
  • selenium-webdriver
  • 2014-04-15 9 views 15 likes 
    15

    Ben bir parça metin içeren bir öğe bulmak için XPath kullanmaya çalışıyorum, ama işe alınamıyor içeren bir bağlantısı olupSelenyum ve xPath - .... metni

    WebElement searchItemByText = driver.findElement(By.xpath("//*[@id='popover-search']/div/div/ul/li[1]/a/span[contains(text()='Some text')]")); 
    

    Son biti, "içerir" ile kaldırırsam, span öğemi bulur, ancak metin içeriğine göre onu seçmem gerekir. Bu, 'Bazı metinlerin' mükemmel bir eşleşmesi olmayacak, çünkü kesilmiş dizeleri de içerebilir.

    Sorun gören var mı?

    +0

    “a” öğesinin HTML'sini (ve çevreleyen öğelerin) göstermelisiniz, böylece yapının XPath'inizle karşılaştırdığı yapıyı karşılaştırabiliriz. – Arran

    cevap

    29

    Buradaki sorunun olduğunu düşünüyorum:

    [contains(text()='Some text')] 
    

    bu yıkmak için,

    1. [], her bir düğümde numaralı düğümde, düğümün her bir düğüm düğümünde çalıştığı bir koşuldur. Bireysel düğümlerden herhangi biri çalışırsa, parantez içindeki koşullarla eşleşir.
    2. text(), bağlam düğümünün alt öğesi olan tüm metin düğümleriyle eşleşen bir seçici 'dur - bir düğüm kümesi döndürür.
    3. contains, bir dizede çalışan bir işlevdir. Bir düğüm kümesi geçirilirse, düğüm kümesi converted into a string by returning the string-value of the node in the node-set that is first in document order olur.

    Sen text() set dış [] o düğümünde her düğüm üzerinde çalışan bir şartlı olan

    [text()[contains(.,'Some text')]]

    1. için bunu değiştirmek için çalışmalısınız tüm maçları bir seçicidir Bağlam düğümünün çocukları olan düğümleri - kümesinin bir düğümünü döndürür.

    2. İç [], düğüm kümesindeki her düğümde çalışan bir koşuldur.

    3. contains, bir dizede çalışan bir işlevdir. Burada tek bir metin düğümünden (.) geçirilir.

    +1

    Harika bir açıklama!Konuda –

    +0

    küçük bir değişiklik, bu da sınıf için çalışabilir mi? '' [içerir (sınıf() = 'Bazı sınıf')] '' ' – TangibleDream

    10

    bunu kullanın

    //*[@id='popover-search']/div/div/ul/li[1]/a/span[contains(text(),'Some text')] 
    

    VEYA

    //*[@id='popover-search']/div/div/ul/li[1]/a/span[contains(.,'Some text')] 
    
    +0

    Teşekkürler! İlk biriyle gittim :) – joakimnorberg

    -4
    @FindBy(xpath = "//span[@class='y2' and contains(text(), 'Your Text')] ") 
    private WebElementFacade emailLinkToVerifyAccount; 
    

    Bu yaklaşım, umarım sizin için çalışacaktır.

    +1

    Lütfen cevabınıza daha fazla bilgi ekleyin. –

    2
    @FindBy(xpath = "//button[@class='btn btn-primary' and contains(text(), 'Submit')]") private WebElementFacade submitButton; 
    
    public void clickOnSubmitButton() { 
        submitButton.click(); 
    } 
    

     İlgili konular

    • İlgili sorun yok^_^