2012-12-17 4 views
22

Wenn ich habe einige HTML wie bekam:Capybara: Ist es möglich, einen Attributwert aus einer CSS-Zeichenfolge zu erhalten?

<div id='drawer'><ul><li><a href='www'>description</a>... 

ich gesehen habe, dass ich den Wert von href in Capybara mit bekommen:

page.find('div#drawer a')['href'] 

Aber ist es eine Möglichkeit, diesen Wert abzurufen Wenn es vollständig als CSS-String beschrieben wird? dh versuchen, den Wert für 'div # Schublade a [href]

ich mit Ausdrücken wie dies versucht haben, zu bekommen:

page.find('div#drawer a[href]')  => can't convert Capybara::Node::Element into String (TypeError) 
page.find('div#drawer a[href]').value => can't convert nil into String (TypeError) 
page.find('div#drawer a[href]').text => returns the text value of 'description' 

ich die CSS-Expression in einer externen Konfigurations haben Datei, also wäre es irgendwie möglich, sie einfach direkt zu verwenden und den Wert des betreffenden Attributs abzurufen?

Danke ...

+0

'a [href]' ist nur ein Selektor, der alle 'a' Elemente mit dem Attribut' href' abgleicht. Was meinst du mit "beschrieben als CSS-String"? – Blender

+0

Warum brauchen Sie das? –

+0

@Blender, ich meinte, dass 'div # drawer a [href]' eine Zeichenfolge ist, die versucht hat, das Attribut zu beschreiben, das mit der CSS-Syntax benötigt wurde. Aber vielleicht ist das nicht möglich? @Andrey, Ich experimentierte mit der Möglichkeit, die erforderlichen CSS-Beschreibungen aller Seitenelemente in externe JSON-Dateien zu stellen, damit ich diesen einzelnen Konfigurationspunkt in Zukunft bei jeder Änderung ändern konnte. Momentan werden die Elemente in jedem Schritt einzeln identifiziert. Wenn sich also etwas ändert, müssen Sie eine ganze Reihe verschiedener Dateien ändern ... – mickael

Antwort

49

Wahrscheinlich zu spät. Aber ich hatte auch das gleiche Problem und habe die Lösung gefunden. Es könnte jemand anderem helfen.

page.find('div#drawer a')[:href] 
+0

Schön, danke Leonardo !! Gut, die Antwort hier zu haben ... :) – mickael

+4

'[: 'data-something']' funktioniert auch gut. – Nobu

+0

Wurde verwendet, um Readonly zu erkennen. Perfekt! 'find (" # some_input ") [: readonly]' –

2

Der einzige Weg, ich in der Lage gewesen, dies zu tun mit jQuery ist.

href = page.evaluate_script("$('a.link_class').attr('href');") 
+0

Diese Lösung funktioniert für mich. Wer fand etwas überzeugender? –

Verwandte Themen