2015-06-05 29 views
9

Tam yolundan (fullElement) bir öğe bulmaya çalışıyorum ve önce daha yüksek düzey elemanı bulup daha sonra bu öğe içindeki alt düzey öğeyi bulmaya çalışıyorum (modularElement).Appium findElement bir satırda iki kez kullanmıyor

WebElement modularElement = appDriver.findElement(By.xpath("//UIATableCell[2]")).findElement(By.xpath("//UIAStaticText[4]")); 
    WebElement wholeElement = appDriver.findElement(By.xpath("//UIATableCell[2]/UIAStaticText[4]")); 

    Logger.LogMessage("modularElement attribute1: " + modularElement.getLocation(), Priority.High); 
    Logger.LogMessage("wholeElement attribute1: " + wholeElement.getLocation(), Priority.High); 

ben yaşıyorum gerçekten garip sorun (modüler ve bütün) iki öğe farklı unsurlar değil (yukarıdaki kodda basılmış farklı yerlerde gösterdiği) aynı biridir geçerli: İşte benim kodudur. Herkes bunun neden böyle olduğunu açıklayabilir mi?

Teşekkürler.

GÜNCELLEME:

Ben de .// kullanarak denedi ama hala aynı sorunu sağlamaktadır:

WebElement modularElement = appDriver.findElement(By.xpath("//UIATableCell[2]")).findElement(By.xpath(".//UIAStaticText[4]")); 

cevap

8

Onlar aynı değildir. İşte

appDriver.findElement(By.xpath("//UIATableCell[2]")).findElement(By.xpath("//UIAStaticText[4]")); 

, sen at any level in the entire DOM tree yerde //UIAStaticText[4] arıyor: xpath kullanırken

webdriver standart kurallarını izler unutmayın: öneki arama "//" belgenin tamamını arayacaktır, Bu geçerli düğümün sadece çocuklarını değil. Aramanızı bu WebElement'in çocukları için ile sınırlamak için ".//" öğesini kullanın.

//UIATableCell[2]/UIAStaticText[4] doğrudan çocukların sadece //UIATableCell[2] ait arasında arama isterken.

+1

size kodunun ilk satırı UIAStaticText' sadece altında 'bulacağını emin misiniz' UIATableCell [2] 've belgede başka hiçbir yerde değil? Sadece, '//' ile başlayan bir XPath, normalde, belgenin * kök düğümünün tüm torunlarından * seçtiği için soruyor. (Ama/'ve' // 'arasındaki fark hakkında genel ifadenize katılıyorum.) – LarsH

+0

@LarsH bu harika bir nokta! Onu özledim. Düzenlenen. Çok teşekkürler! – alecxe

+0

Yorumlar için teşekkürler. ./UIAStaticText[4] 'ı kullanmaktan kaçınmak bir' öğe bulunamadı 'hatasıyla sonuçlanıyor. Yukarıdaki 2 satırlık kodu kopyalayıp yapıştırın ve tümElement bulunacak ancak modularElement öğesi bulunmuyor. –

0

Ben bunun yerine böyle yapardı:

By locator = new ByChained(By.xpath("//UIATableCell[2]"),By.xpath(".//UIAStaticText[4]")); 
WebElement modularElement = appDriver.findElement(locator); 

Ya da belki bu:

public WebElement getCellTextElement(int cell, String varText) { 
    By locator = new ByChained(By.xpath("//UIATableCell[" + cell + "]"), 
     By.xpath(".//UIAStaticText[contains(text(),'" + varText + "')]")); 
    WebElement modularElement = appDriver.findElement(locator); 
    return modularElement; 
}