2016-06-29 7 views
0

Ich bin neu in Selenium webdriver und ich benutze C#, um das Skript zu schreiben. Ich habe ein Feld Geschlecht mit männlichen und weiblichen Option, diese Optionen sind eigentlich Radio-Tasten, sondern werden wie Etiketten angezeigt.C# - Selenium Webdriver, Nicht in der Lage zu wählen radiobutton als ein Etikett wird darüber angezeigt

versuchte ich Million Möglichkeiten, es ausgewählt zu haben.

  1. driver.FindElement (By.CssSelector ("[value = 'weiblich']")) Klicken Sie auf(); .
  2. driver.FindElement (By.XPath ("// input [enthält (@ Wert, 'männlich']")) Klicken Sie auf();
  3. driver.FindElement (By.CssSelector ("input [type =‘ radio '] [value =' Männlich '] ")). Klicken Sie auf();
  4. driver.FindElement (By.XPath (" //input[@value='Female']")).Click();

Aber NONE von oben gearbeitet Der hTML-Code für die Gender Felder wie folgt aussieht:.

<li class="radiobutton-yesno ui-buttonset"> 
 
\t <span class="label"> 
 
\t Gender       
 
\t \t <span class="help-icon" data-title="Your gender is a factor in determining your cost."> 
 
\t \t </span> 
 
\t </span> 
 
\t <input type="radio" id="genderNo_1" name="gender_1" value="Male" class="reqCntrl ui-helper-hidden-accessible"> 
 
\t \t <label for="genderNo_1" class="ui-button ui-widget ui-state-default ui-button-text-only ui-corner-left" role="button"> 
 
\t \t \t <span class="ui-button-text">Male</span> 
 
\t \t </label> 
 
\t <input type="radio" id="genderYes_1" name="gender_1" value="Female" class="ui-helper-hidden-accessible"> 
 
\t \t <label for="genderYes_1" class="ui-button ui-widget ui-state-default ui-button-text-only ui-corner-right" role="button"> 
 
\t \t \t <span class="ui-button-text">Female</span> 
 
\t \t </label> 
 
</li>

und das Feld auf Seite erscheint wie folgt aus: enter image description here

+0

Kann jemand mir bitte dabei helfen, da ich nicht in der Lage bin, einen Weg, um herauszufinden, –

Antwort

0

Der <input> Typ wahrscheinlich über css/js Regeln versteckt wird. Sie können also nicht auf diese klicken - Selen lässt Sie nicht etwas tun, was ein Benutzer nicht kann.

Das @value Attribut gehört auch zu dem Radiobutton <input> s so verwenden, dass in der Selektor wird nicht funktionieren, da das gesamte Element ausgeblendet ist.

Verwenden Sie stattdessen die <label> oder die <span> unter Etikett und Spiel mit ihm Text ist:

  1. //label/span[text()='Female']
  2. //label/span[text()='Male']

PS: Das ist ein bisschen beunruhigend WRT die Natur dieser Frage :

"Ihr Geschlecht ist ein Faktor, den ich n Bestimmen Sie Ihre Kosten. "

+0

Vielen Dank für Ihre Antwort, um fortzufahren. Ich habe versucht mit driver.FindElement (By.XPath ("// label/span [text() = 'weiblich']")). Klicken Sie auf(); - Es hat nicht funktioniert. Dann, als ich es mit driver.FindElement versuchte (By.XPath ("// label/span [enthält (., 'Male')]")).Klicken(); - Es hat einmal funktioniert, aber als ich versucht habe, es erneut auszuführen, funktioniert es überhaupt nicht. Nicht in der Lage herauszufinden, was das Problem ist. Kann jemand eine andere Alternative vorschlagen? –

+0

Ich muss schließlich Javascript einfügen und es hat funktioniert. Ich habe alle Label-Tags auf der Seite durchlaufen und dann mit der childnode -Eigenschaft das darunter liegende Span-Tag ausgewählt. –

+0

Dann sollten Sie Ihre Lösung als Antwort posten, damit andere SO-Besucher davon profitieren können. – aneroid

0

Es ist eine gute UX-Übung, Radio in ein Etikett zu stecken. Versuchen Sie, Ihr Markup so zu ändern, dass es dieser Regel entspricht. Danach sollten Sie in der Lage sein Radio zu wählen, indem Sie auf das Label klicken (wählen Sie die Bezeichnung per Text aus, wie @aneroid Ihnen gezeigt hat).

0

Können Sie sagen, welchen Fehler Selen wirft?

Sie können stattdessen versuchen, ein Skript zu verwenden.

var temp = "var elt = document.getElementById('#myRadioButton'); elt.click();"; 
driver.executeScript(temp); 
+0

Ja, ich hatte js benutzt und es löste das Problem. Wie auch immer, danke. –