2017-05-17 3 views
1

Ich habe folgende HTML: , die eine Klasse und ein benutzerdefiniertes Attribut hat, habe ich mehrere Header mit dem gleichen Klassennamen. Ich wollte wissen, wie man dieses Element eindeutig erhält und darauf klickt.Wie klicken Sie auf ein benutzerdefiniertes Attribut in Selen?

<h4 class="font-white topic-heading progress-header no-margin width-80 d-table-cell" data-collapse-id="1">I. Introduction</h4> 

Das ist, was ich versucht: -

Ich habe versucht, das Attribut der Klasse zu erhalten = "font-weiß ..." mit Daten-collapse-id = "1":

var element = driver.findElement(By.xpath("//*[@class='font-white topic-heading progress-header no-margin width-80 d-table-cell']")).getAttribute('data-collapse-id="1"'); 
console.log(element); // this prints a promise. 

element.click(); //element.click is not a function exception 

ich auch versucht: -

var element = driver.findElement(By.xpath("//*[@data-collapse-id='1']")); 

element.click(); // element.click is not a function exception. 

ich wissen wollte, wie dieses Element in Selen zu holen und klicken sie darauf.

ist dies die gesamte div:

<div class="page-width d-table topic-heading-div"> 
    <h4 class="font-white topic-heading progress-header no-margin width-80 d-table-cell" data-collapse-id="1">I. Introduction</h4> 
    <i class="fa fa-check font-white font-18 width-20 d-table-cell text-center vertical-center" aria-hidden="true"></i> 
</div> 
+0

"h4" ist ein Header-Tag und nicht anklickbar (meines Wissens). Welcher HTML-Code folgt dieser Zeile? –

+0

Ich habe das gesamte Div in meiner Antwort hinzugefügt danke. – kushal

+0

Füge/I zum Ende deines XPath hinzu.Ich glaube, das wird funktionieren –

Antwort

0

Haben Sie versucht:

driver.findElement(By.cssSelector("h4[data-collapse-id='1']")).click(); 

Finding Element durch dieses Attribut funktionieren sollte, da diese eindeutig ist. Es kann manchmal auch nicht auf das Element von Xpath klicken. Ich denke, das sollte funktionieren

+0

Vielen Dank das hat funktioniert. :) – kushal

+0

Oh großartig. Bitte :) –

0

Es scheint, dass Ihre element Variable beabsichtigt, attribute zurückzukehren. Allerdings sollte getAttribute() Methode Attributname Wert als Argument empfangen und einen Attributwert zurück, die eine einfache String ist ... Und hier hast du einige Probleme:

  • Sie versuchen, falsche Argument übergeben: 'data-collapse-id="1"' statt 'data-collapse-id'
  • Attributwert, eine Zeichenfolge, ist nicht anklickbar!

einfache Antwort auf Ihre Frage- gibt es keine Möglichkeit, Sie auf einem benutzerdefinierten Attribut klicken können

0

Klasse gemeint ist eine Gruppe von Elementen, die ähnlich Merkmalen zu definieren. In diesem Fall wird die Klasse topic-heading verwendet, um die Tags <h4> zusammen mit einem eindeutigen ID-Attribut namens data-collapse-id zu gruppieren. Aber in solchen Fällen können wir keine ID verwenden, um jedes Webelement zu identifizieren/spezifizieren, da die Elemente derselben Klasse Hunderte/Tausende sein können.

Sie können versuchen, Ortung jedes Header-Elements eindeutig die folgenden Möglichkeiten verwenden:

 
var exactHeadingText = "I. Introduction"; // Exact heading 
By locExactTopicHeading = By.xpath("//h4[contains(@class,'topic-heading') and text()='"+ exactHeadingText + "']"); 

var partialHeadingText = "Introduction"; // Partial heading 
By locPartialTopicHeading = By.xpath("//h4[contains(@class,'topic-heading') and contains(text(),'"+ partialHeadingText + "')]"); 

Im Idealfall sollten Sie die exactHeadingText/partialHeadingText als Funktionsparameter/Argument übergeben, damit der Code jedes Thema Überschrift zu holen wiederverwendet werden kann .

Sie können dann findElement() verwenden und jede Operation darauf ausführen.

Verwandte Themen