2014-06-18 23 views
5

Ich möchte für Kontrollkästchen aktiviert oder deaktiviert werden.Kann nicht finden: vor Css-Selektorelement in Selen-Webdriver

Dies ist der HTML-Code für die Checkbox

geprüft
<div classs="input-control checkbox"> 
<span class="check"> 
::before 
</span> 
</div> 

::before ist CSS-Selektor.

wenn ich Checkbox hoverover auf, zeigt es webelement als span.check::before

aber

driver.FindElement(By.CssSelector("span.check::before")); 

throws Exception Element nicht gefunden.

Jede Hilfe wird sehr geschätzt.

+3

Sie sagen, Sie haben ein ':: before' Pseudoelement aber Ihre Wähler sagen' :: after' ...? (Ich bin mir nicht sicher, ob Sie überhaupt Pseudo-Elemente finden können.) – BoltClock

+0

Warum müssen Sie sogar ein Pseudo-Element auswählen? – Arran

+0

'div.checkbox :: after 'ist * not *' span.check :: before'. Jedes Element kann getrennte ':: before'- und' :: after'-Pseudo-Elemente haben. –

Antwort

0

Ich bin nicht sicher von Ihrem genauen HTML, wie der Kommentar erwähnt, gibt es keine ::after in Ihrem Beispiel html. Basierend auf Ihrer Beschreibung scheint dies ähnlich zu sein, aber nicht sicher, ob das genau Ihre Situation ist.

Ich habe die Mausbewegung verwendet und dann auf das Element gewartet, das die modifizierte CSS/Klasse anzeigt. Die Maus bewegt sich und schwebt zum ersten Element und wartet dann, bis die zweite auf dem Bildschirm erscheint. Dies funktioniert ähnlich wie beim Klicken und wartet darauf, dass das Element angezeigt wird.

Hover Codebeispiel - muss der Code Sprache und Struktur ... passend

[Actions Instance goes here].MoveToElement([IWebElementGoesHere]).Perform(); 

Sie können auch einfach einmal

[Actions Instance].Click([IWebElementGoesHere]).Perform(); 

Referenz für diese Bibliothek: https://code.google.com/p/selenium/wiki/AdvancedUserInteractions

+0

Danke allen. Ja, es war ein Tippfehler von meiner Seite. Ich legte falsches Webelement in findElement-Anweisung. es sollte driver.FindElement sein (By.CssSelector ("span.check :: before")); – user3752861

+0

Auch ich habe herausgefunden, dass Pseudo-Element nicht von Selen CSS Selektor unterstützt werden. Im obigen Fall generiert chrome das :: before-Pseudo-Element, wobei firefox das DOM überhaupt nicht ändert. Es wurde kein Pseudoelement erstellt. – user3752861

2

Ich habe konfrontiert ähnliches Problem mit Pseudo-CSS-Selektoren (:: vor gleich), habe ich das Problem mit der "Actions" -Klasse von Selen-Java zu überwinden.

Actions action = new Actions(driver); 
action.moveToElement(driver.findElement(By.cssSelector("button[id$='save-button']"))).build().perform(); 

Ich hoffe, es hilft.

Danke, Sampath