2017-01-19 3 views
1

Ich hoffe, ich beschreibe mein Problem/meine Frage verständlich.Selen: xpath following-sibling, wo Geschwister mehr Kinder haben

ich habe und html, die wie folgt aussieht:

<div class="class-div"> 
 
\t <label class="class-label"> 
 
\t \t <span class="class-span">AAAA</span> 
 
\t </label> 
 
\t <div class="class-div-a"> 
 
\t \t <textarea class="class-textarea"> 
 
\t \t </textarea> 
 
\t </div> 
 
</div> 
 
<div class="class-div"> 
 
\t <label class="class-label"> 
 
\t \t <span class="class-span">BBBB</span> 
 
\t </label> 
 
\t <div class="class-div-a"> 
 
\t \t <textarea class="class-textarea"> 
 
\t \t </textarea> 
 
\t </div> 
 
</div>

Ich mag die Xpath für die TextArea-, wo der Wert des Etiketts AAAA es mit einem Wert in Selen zu füllen ist.

So wie diese somelike ...

wait.Until(ExpectedConditions.ElementIsVisible(
    By.XPath("//div[@class='class-div']/label[@class='class-label'][span[@class='class-span' and text()='AAAA']]/following-sibling::div[@class='class-div-a']/textarea[@class='class-textarea']"))).SendKeys(valueTextArea); 
+1

Das sieht wie richtig 'XPath' aus. Was stimmt damit nicht? – Andersson

+0

Selen "sieht" das Textfeld nicht. Ich erhalte eine Zeitüberschreitungsausnahme. –

Antwort

2

Problem in diesem Kellner Zustand sein könnte, ExpectedConditions.ElementIsVisible

Die Sache ist, dass Ihre <textarea> in Selen Kontext nicht 'sichtbar' ist, bedeutet Sichtbarkeit dieses Element ist in DOM vorhanden (was wahr ist) und seine Größe ist größer als 0px, was für Ihr <textarea> Element falsch sein könnte. In Java würden Sie ExpectedConditions.presenceOfElement() anstelle von ExpectedConditions.visibilityOfElement() verwenden, nicht sicher, wie es in C# geht, aber Sie erhalten das Bild.

Versuchen Sie zu sehen, ob es Ihr Problem löst.

+0

Ich habe das sehr schnell ausprobiert und ich denke du hast Recht. Verwenden des Seitenfactorymodells von: [FindsBy (How = How.XPath, Verwenden von = "// label/span [text() = 'AAAA']/ancestor :: div [@ class = 'class-div'] // textarea ")] private readonly IWebElement _textAreaAAAA = null; und das Erstellen einer Methode, um einen Wert in das AAAA-Feld einzugeben, funktionierte gut für mich. – Dazed

+0

@acikojevic, das Problem liegt definitiv nicht bei 'ExpectedConditions.ElementIsVisible'. Der Grund, warum ich das sage, ist, weil in dem Moment, in dem ich meinen XPath ändere, um explizit nach dem ID-Attribut '