2012-07-31 11 views
7

Ich habe 2 mögliche Divs.Prüfen, ob Element zwei Klassen hat

<div class='a b'></div> 

und

<div class='c d'></div> 

Gibt es eine Möglichkeit zu überprüfen, ob div Element 2 Klassen a und b hat?

Ich benutze Ruby, Capybara und XPath für die Auswahl von Elementen, aber CSS ist in Ordnung, wenn es Problem lösen könnte.

Antwort

6

Diese CSS-Selektor in Capybara funktionieren sollte:

page.has_css?('div.a.b') 

die wird übereinstimmen

<div class="a b"> aber nicht <div class="a">

+0

Das funktioniert. Könnte es mit XPath gemacht werden? –

+1

ja, aber es ist hässlicher. http://stackoverflow.com/questions/3881044/how-to-get-html-elements-with-multiple-css-classes – AJcodez

5

Sie können dies tun:

page.should have_css('div.a.b') 

Wenn Sie nicht rspec verwenden, es ist dies:

page.has_css?('div.a.b') 
+0

Dies erfordert Rspec, ist es nicht? –

+1

Ja. Sie können 'page.has_css? ('Div.a.b')' verwenden, wenn Sie RSpec nicht möchten. – Dougui

2

XPath Lösung:

Verwenden:

div[contains(concat(' ', @class, ' '), ' a ') 
    and 
    contains(concat(' ', @class, ' '), ' b ') 
    ] 

Dies wählt jedes div Kind des Kontextknotens, deren class Attribut enthält sowohl die Klassen "a" und "b".

Wenn es erforderlich ist, dass das class Attribut jeder div genau enthält, ausgewählt (nur) diese beiden Klassen und keine anderen Klassen verwenden:

div[contains(concat(' ', @class, ' '), ' a ') 
    and 
    contains(concat(' ', @class, ' '), ' b ') 
    and 
    string-length(normalize-space(@class)) = 3 
    ] 
Verwandte Themen