2015-08-17 2 views
10

Ich erhalte die Fehler:Verbindung Klassennamen Fehler nicht zulässig WebDriver

"Compound-Klassennamen nicht erlaubt"

beim Versuch, Web-Element zuzugreifen, in dem in dem Klassennamen des Elements Zwischenräume haben. Die Seitenquelle für das Webelement ist wie folgt.

driver.findElement(By.className("alert alert-success")); 

<div class="alert alert-success" alert-dismissable"="" id="58417" style="display: none;"> 
 
    <button type="button" class="close hide-panel close-icon-58417" data-dismiss="alert" aria-hidden="true" style="display: inline-block;">×</button><span id="caret-58417" class="notification-caret caret-58417"></span> 
 
    <div class="hide-panel close-icon-58417" id="58417" style="display: block;"> 
 
     <span class="glyphicon glyphicon-ok-sign"></span><strong>Success</strong> KeyLinks Updated Successfully 
 
     <div class="notification-panel-body panel-body-58417">REST Invocation Success</div> 
 
    </div> 
 
</div>

Ich habe versucht, wie unten das Element von CSS Pfad zu finden. Aber das Element ist damit nicht suchbar.

driver.findElement(By.cssSelector(".alert alert-success")); 

Dies war die Abhilfe given in the Link aber noch keinen Erfolg. Ihre Hilfe wird sehr geschätzt.

+0

Mögliches Duplikat von [Wie vermeidet man zusammengesetzte Klassennamen Fehler in Page Object?] (Http://Stackoverflow.com/questions/17808521/how-to-avoid-compound-class-name-error-in-page- Objekt) – Liam

Antwort

20

können Sie das Element zugreifen, wenn es mehrere Klassen wie unten:

driver.findElement(By.cssSelector(".alert.alert-success"); 
4

können Sie verwenden

driver.findElement(By.className("alert-success")); 

oder

driver.findElement(By.className("alert")); 

Wie jetzt Selen bieten keine Unterstützung für mehrere Klassen vorherigen Namen Ihrer Klassennamen ein Leerzeichen enthalten, WebDriver es als „Verbindung sehen Wähler". Sie können cssSelector oder ID für die Auswahl des Webelements verwenden.

+1

Diese Lösung hat für mich funktioniert. Danke vielmals. Was könnte der Grund dafür sein, dass driver.findElement (By.cssSelector (". Alert alert-success"))); kann das Element nicht finden? –

+0

müssen Sie so verwenden: '.alert.alert-success' – ldevp

1

Das Problem liegt an der Art, wie nach Klassenname funktioniert.

in Namen der Code-Klasse ist class="alert alert-success"

Wenn der Klassenname Raum hat man den obigen Fehler erhalten werden. Sie können das Problem einfach loswerden, indem Sie Id, CSS, Xpath, regulären Ausdruck oder eine andere Element-Finder-Methode verwenden.

Müssen Sie den Klassennamen verwenden oder können Sie eine andere Methode verwenden? Lassen Sie es mich wissen, wenn Sie den Klassennamen verwenden müssen.

+0

Es ist nicht notwendig für mich, ClassName Identifier zu verwenden. Was wäre die Lösung, wenn die Verwendung von ClassName ein Muss ist? –

2

Wenn Nutzung der Klassenname ist, müssen Sie die folgenden Möglichkeiten nutzen:

1) CSS-Selektoren:

driver.findElement(By.cssSelector(".alert.alert-success"); 

2) mit XPath

driver.findElement(By.xpath("//div[@class='alert alert-success']")) 

Versuchen Sie, Xpath zu vermeiden, und verwenden Sie stattdessen Css-Selektoren.

0

Die meiste Zeit Klassenname Attribut eines Elements hat Gruppen von Klassen Namen. wie class = ‚alert alert-Erfolg eine andere Klassenname‘

wenn Sie CSS-Selektor verwenden, dann entfernen Sie Leerzeichen zwischen den Klassennamen und erstellen Namen wie unter Ihnen cla: driver.findElement (By.cssSelector (“ .alert.alert-success.another.class.name ")

. => repräsentieren Klasse

=> ID repräsentieren

für CSS-Selektor.

0

Es kann auch durchgeführt werden unter Verwendung von Klassennamen wie:

driver.find_element_by_class_name("alert") 

oder

driver.find_element_by_class_name("alert-success") 

Sie jemand Klassenname aus zwei oder mehreren Klassennamen durch Leerzeichen getrennt auswählen können, es wird gut funktionieren.

Verwandte Themen