487 Stimmen

Wie kann ich ein Attribut abgleichen, das eine bestimmte Zeichenfolge enthält?

Ich habe ein Problem bei der Auswahl von Knoten nach Attributen, wenn die Attribute mehr als ein Wort enthalten. Zum Beispiel:

<div class="atag btag" />

Dies ist mein xpath-Ausdruck:

//*[@class='atag']

Der Ausdruck funktioniert mit

<div class="atag" />

aber nicht für das vorherige Beispiel. Wie kann ich die <div> ?

28voto

Brent Atkinson Punkte 339

Beachten Sie, dass die Antwort von bobince zu kompliziert sein könnte, wenn Sie davon ausgehen können, dass der gesuchte Klassenname ist keine Teilzeichenkette eines anderen möglichen Klassennamens . Wenn dies der Fall ist, können Sie einfach den Teilstring-Abgleich über die Funktion contains verwenden. Das folgende Beispiel passt auf jedes Element, dessen Klasse die Teilzeichenkette "atag" enthält:

//*[contains(@class,'atag')]

Wenn die obige Annahme nicht zutrifft, wird eine Teilzeichenkette mit Elementen übereinstimmen, die Sie nicht beabsichtigen. In diesem Fall müssen Sie die Wortgrenzen finden. Die zweite Antwort von bobince findet die genauen Übereinstimmungen, indem sie die Leerzeichen verwendet, um die Grenzen der Klassennamen zu finden:

//*[contains(concat(' ', normalize-space(@class), ' '), ' atag ')]

Dies entspricht atag und nicht matag .

8voto

armyofda12mnkeys Punkte 2761

Um die Antwort von bobince zu ergänzen... Wenn das Tool/die Bibliothek, das/die Sie verwenden, Xpath 2.0 verwendet, können Sie auch dies tun:

//*[count(index-of(tokenize(@class, '\s+' ), $classname)) = 1]

count() wird offensichtlich benötigt, weil index-of() eine Folge von jedem Index zurückgibt, bei dem es eine Übereinstimmung in der Zeichenkette gibt.

4voto

Umesh Chhabra Punkte 51

Sie können Folgendes versuchen

By.CssSelector("div.atag.btag")

0voto

Jarno Argillander Punkte 5745

Ich bin auf der Suche nach einer Lösung für Ranorex Studio 9.0.1 hierher gekommen. Dort gibt es noch kein contains(). Stattdessen können wir regex wie verwenden:

div[@class~'atag']

-1voto

user3906232 Punkte 53

Für die Links, die eine gemeinsame URL enthalten, muss die Konsole eine Variable enthalten. T

webelements allLinks=driver.findelements(By.xpath("//a[contains(@href,'http://122.11.38.214/dl/appdl/application/apk')]"));
int linkCount=allLinks.length();
for(int i=0; <linkCount;i++)
{
    driver.findelement(allLinks[i]).click();
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X