2016-04-15 18 views
0

Ich versuche eine Webanwendung zu automatisieren, die mit angular JS bis selenium webdriver(C#) entwickelt wurde, und ich versuche, auf eine Zelle in einem eckigen UI-Raster zu klicken. Ich habe versucht, durch CSS-Selektor oder XPath zu finden, aber es hat nicht geholfen.Selen-Webdriver C# - Das Element kann nicht in einem Gitter mit UI-Winkel gefunden werden

Css selector is generating dynamic ID - #\31 460691734316-0-uiGrid-00KQ-cell > div 

Xpath is also dynamic //*[@id="1460691734316-0-uiGrid-00KQ-cell"]/div 

und ich versuchte

mit
driver.FindElements(By.CssSelector("*[id^='1460'][id$='cell']")); 

aber nicht

jede Hilfe sehr geschätzt habe helfen wird. Ich kann mehr Details senden, wenn benötigt

+0

Durch diesen Kommentar bestätigen, dass Webdriver auf Java auch nicht ordnungsgemäß mit Markup-eckig generiert. Wenige andere Stackoverflow-Posts, die in den letzten Monaten datiert werden, haben noch keine Antwort. –

Antwort

0

Wie wäre es mit dem Versuch, das Element mit Selenium IDE zu finden, die ein Plugin von Firefox ist? statt

In der IDE können Sie bequem die Selektor finden Sie das Element mit GUI-Auswahl

+0

Ich tat das auch und es zeigt das gleiche Ziel in IDE - // div [@ id = "1460691734316-0-uiGrid-00KQ-Zelle"]/div – gtrig1414

0

Anstatt identifiziert das Element speziell durch seine ID, können Sie die Elemente um es verwenden? Ist diese Zelle in einer Tabelle und in einer konsistenten Position? Gibt es ein übergeordnetes Element, mit dem Sie die untergeordneten Elemente in Ihrem C# -Programm besser auswählen und durchlaufen können, um die gewünschte Zelle zu finden?

+0

Ja, es ist eine Zelle in einer Tabelle und an einer konsistenten Position . Das Problem ist, dass ich nicht einmal ein Element des Rasters finden kann, um zu den Kindern zu navigieren. – gtrig1414

+0

Nun, noch einmal, ich schlage vor, die Eltern weiter zu betrachten. Da Sie keine expliziten Bezeichner haben, die Sie verwenden können, gibt es zu irgendeinem Zeitpunkt mindestens ein div, das konsistent im gleichen Index eines Bereichs ist, in den Sie dann hineingreifen und iterativ in die Elemente filtern können, um diese Zelle zu finden? Es ist nicht der effizienteste Weg, aber wenn Sie keine expliziten Identifikatoren haben, müssen Sie damit umgehen. – Xaniff

0

Für mein spezielles Problem mit der HTML-Seite, die Iframes enthält und mit AnglularJS entwickelt wurde, hat mir der folgende Trick viel Zeit gespart: Im DOM habe ich deutlich gesehen, dass es einen Iframe gibt, der den gesamten Inhalt umschließt. So sollte folgenden Code arbeiten:

driver.switchTo().frame(0); 
waitUntilVisibleByXPath("//h2[contains(text(), 'Creative chooser')]"); 

Aber es funktioniert nicht und sagte mir, so etwas wie „Schalter nicht zu Rahmen Fenster war geschlossen.“. Dann änderte ich den Code zu:

driver.switchTo().defaultContent(); 
driver.switchTo().frame(0); 
waitUntilVisibleByXPath("//h2[contains(text(), 'Creative chooser')]"); 

Danach ging alles reibungslos. Offensichtlich hat Angular etwas mit Iframes gemangelt und direkt nach dem Laden der Seite, wenn Sie erwarten, dass der Treiber sich auf den Standardinhalt konzentriert, wurde er von einigen bereits durch den Angular-Frame entfernt. Ich hoffe, dass dies einigen von Ihnen helfen kann.

Verwandte Themen