2017-09-01 5 views
0

Ich möchte das Element ohne Verwendung von Xpath finden, aber ich habe andere ul's Elemente und "class = title" auf meiner Seite. Also kann ich weder Type noch "class = title" verwenden.FindElement in Selen ohne Xpath

<div id="pai"> 
<div class="def"> 
    <div class="abc" > 
     <p class=title>Title</p> 
      <ul> 
       <li></li> 

bin ich über etwas nachzudenken unten wie, aber ich weiß nicht, ob es die beste Praxis ist:

WebElement um = driver.findElements(By.className("abc")); 
WebElement dois = um.findElements(By.className("title")); 
tamUl = dois.findElements(By.tagName("ul")).size(); 
+0

Warum möchten Sie Xpath nicht verwenden? Warum nicht CSS sonst? –

+1

Das funktioniert, aber es ist besser, wenn Sie einfach Ihre Wahl treffen, was Sie wollen, vor allem, wenn 'um' hier keinen anderen Zweck erfüllt als' dois'. Css Selektor '.abc .title'. Ich bin mir nicht sicher, ich verstehe, warum nicht Xpath verwenden, aber CSS-Selektoren neigen dazu, ein bisschen sauberer zu sein, wenn Sie sie verwenden können, wenn Sie für diese offen sind. – mrfreester

Antwort

0

Im Fall, wenn Sie bereit sind oder zu verwenden XPath nicht kann oder nicht CSS-Selektoren, möchten Sie eine Liste aller benötigten Elemente auf der Seite erhalten. Dann wählen Sie (entweder empirisch, durch Debuggen oder Verwenden von Bedingungen) den Index des spezifischen Elements, das zu verwenden ist. Im Anschluss kann der Fall, dass Sie möchten, um zu versuchen:

List <WebElement> elements = driver.findElements(By.className("title")); 

if (elements.size() > 0) { 
    elements.get(INDEX_OF_YOUR_ELEMENT).findElements(By.tagName("ul")).size(); 
} 

Achten Sie auf den Unterschied zwischen findElement() und findElements() Methoden. Während findElement() nur das erste Element zurückgibt, wenn mehrere Vorkommen gefunden werden, löst es gleichzeitig NoSuchElementException aus, wenn nichts gefunden wird, wobei findElements() nur eine leere Liste zurückgibt.

+0

Ich habe dieses "get (INDEX_OF_YOUR_ELEMENT)" nicht irritiert. Welches Element ist das? –

+0

'public int areaTeste() { \t \t \t \t Liste Elemente = driver.findElements (By.className ("title")); . \t \t if (elements.size()> 0) { \t \t int Tamarea = elements.get() findElements (By.tagName ("Li")), size(). \t \t zurück tamArea; \t \t} ' –

+0

@CarolC, wenn Sie 2 Elemente mit Klasse" Titel "auf Seite haben, erhalten Sie die Liste der Größe 2 mit diesen Elementen. Es liegt also an Ihnen, welches Element dieser Liste Sie verwenden möchten (Sie können auf das Element in der Liste nach Index, 0 für das erste Element, 1 für das zweite Element usw. zugreifen). Die Reihenfolge der Elemente auf der Seite wird in der Liste beibehalten. – Eugene