2017-11-24 4 views
0

Ich versuche, eine Liste der Elemente mit XPATH abrufen und aus dieser Liste möchte ich ein Kind Element basierend auf Klassennamen abrufen und klicken Sie darauf.Verwenden von Composed Xpath, um ein Element zu suchen und darauf klicken

var rowList = XPATH1 + className; 
var titleList = className + innerHTMLofChildElement; 

for(var i = 0; i < titleList.length; i++) { 
       if(titleList[i][0] === title) { 
        browser.click(titleList[i][0]); //I don't know what to do inside the click function 
      } 
     } 

Antwort

0

Ich hatte eine ähnliche Implementierung vielleicht, was Sie versuchen, aber meine Implementierung ist vielleicht komplexer aufgrund der Verwendung von CSS-Selektoren statt XPath. Ich bin mir sicher, dass dies nicht optimiert ist und höchstwahrscheinlich verbessert werden kann.

Dies nutzt die Methoden elementIdText() und elementIdClick() von WebdriverIO mit dem „Text Values“ des Web JSON Element zu arbeiten, und klicken Sie dann auf das beabsichtigte Element nach dem Matching, was Sie suchen.

http://webdriver.io/api/protocol/elementIdText.html http://webdriver.io/api/protocol/elementIdClick.html

Schritt 1 - Finden Sie alle Ihre potentiellen Elemente, mit denen Sie arbeiten wollen:

// Elements Query to return Elements matching Selector (titles) as JSON Web Elements. 
// Also `browser.elements('<selector>')` 
titles = browser.$$('<XPath or CSS selector>') 

Schritt 2 - Zyklus durch die Elemente der Innerhtml oder Text Werte Strippen und in Schub ein separates Array:

// Create an Array of Titles 
var titlesTextArray = []; 
titles.forEach(function(elem) { 
    // Push all found element's Text values (titles) to the titlesTextArray 
    titlesTextArray.push(browser.elementIdText(elem.value.ELEMENT)) 
    }) 

Schritt 3 - Zyklus durch das Array der Titeltexte Werte zu finden Nach was suchst du. Verwenden Sie elementIdClick() Funktion den gewünschten Wert klicken:

//Loop through the titleTexts array looking for matching text to the desired title. 
for (var i = 0; i < titleTextsArray.length; i++) { 
    if (titleTextsArray[i].value === title) { 
    // Found a match - Click the corresponding element that 
    // it belongs to that was found above in the Titles 
    browser.elementIdClick(titles[i].value.ELEMENT) 
    } 
} 

ich all dies in eine Funktion eingewickelt, in denen ich den beabsichtigten Text versehen (in Ihrem Fall ein bestimmtes title) Ich wollte suchen. Hoffe das hilft!

+0

Was passiert, wenn ich eine Liste von Objekten mit dem gleichen Titel habe und auf ein bestimmtes Element klicken möchte, das seine Nummer im Array verwendet? – dielieus

+0

Es ist schwer zu sagen ohne Kenntnis Ihrer HTML/Element-Struktur, aber vielleicht müssen Sie einen "einzigartigen" Selektor finden. Wenn nur "title text" angezeigt wird, wählt webdri- dio höchstwahrscheinlich standardmäßig das Element "First", das dem gewünschten Selektor entspricht. Können Sie ein Beispiel für Ihre Elementstruktur angeben? In CSS-Selektoren können Sie einen "N-Kind (#)" - Selektor verwenden, mit dem Sie ein Element basierend auf seiner Position in einer Liste auswählen können, aber es ist eine brüchige Art oder Auswahl. – Denzik

+0

Ja, es funktioniert! So muss ich die Liste nicht erstellen, Element, etc .. Ich gebe nur Kind Nummer als Parameter der Funktion, die Element klickt. Vielen Dank! – dielieus

0

Ich weiß nicht, node.js, aber in Java sollten Sie Ihr Ziel erreichen durch:

titleList[i].findElementBy(By.className("classToFind")) 

unter der Annahme titlelist [i] ist ein Element der Liste Sie von untergeordneten Elemente erhalten möchten

Verwandte Themen