2009-05-23 8 views
3

Ich schreibe einen Selenium-Test in PHP, um die Leistung einer Webanwendung in Firefox zu überprüfen. Ich möchte dies als Basis für den Vergleich verschiedener Leistungsverbesserungen verwenden (Upgrade von JQuery, PHP 5.3 usw.). Die Web-Anwendung ist sehr AJAX-intensiv und bisher habe ich nur auf ein Problem gestoßen.Selenelement nicht gefunden

Ich habe einen AJAX-Aufruf, der Inhalt in eine vorhandene div lädt. Um zu testen, ob der Anruf abgeschlossen ist ich die folgende Zeile Code verwenden:

$selenium->waitForCondition('$(\'div[id="divId"]\').height() > 100', $timeout); 

Dies funktioniert, wie ich erwartet habe, aber wenn ich versuche, in jeden Eingang zu geben in die div geladen, Selen führt den Fehler „Element Eingabe [@ id = "EingabeID"] nicht gefunden ".

Ich habe überprüft, dass die ID für die Eingabe korrekt ist, und ich habe versucht, mit anderen Eingabeelementen, die innerhalb der Div geladen sind und keiner von ihnen funktioniert. Ich habe auch versucht, einen Schlaf (30) hinzuzufügen, so dass ich sicher bin, dass die Elemente im DOM und auf dem Bildschirm sind, aber wieder machte es keinen Unterschied.

Ich bin wirklich an diesem Punkt fest und kann nicht weitermachen, bis ich dieses Problem gelöst habe. Jede Hilfe wird sehr geschätzt.

Danke, James Armes

Antwort

4

ich auf ein paar Dinge aussehen würde:

  1. Vergewissern Sie sich, dass die Bedingung, die Sie gegen bist Überprüfung nicht wahr ist, bevor die Gegenstände geladen werden. Die Überprüfung height scheint verdächtig, zum Beispiel - wäre es nicht besser zu testen, ob Kinder in der div sind?

  2. Abhängig davon, wie Sie den Selektor schreiben, denkt Selen, dass input[@id='inputId'] die tatsächliche ID für den Selektor ist (und nicht nur inputId). Stellen Sie sicher, dass dies nicht der Fall ist. Versuchen Sie einfach inputId zu verwenden, was ausreichen sollte, da es sich um einen Bezeichner handelt.

  3. Selen kann knifflig sein. Probieren Sie verschiedene Browser aus, um zu sehen, ob Sie unterschiedliche Ergebnisse erhalten. Wenn dies der Fall ist, kann es sich um einen Bereich handeln, den Selen nicht gut abdeckt. Obwohl diese in der Regel sehr selten sind, ist es möglich. Aber wir müssten mehr Code sehen, bevor wir sicher sind, dass dies der Fall ist.

+1

Nummer 2 mein Problem hier behoben. Soweit Nummer 1 betroffen ist, scheint es nicht so zu funktionieren, wie ich es erwartet hatte. Ich überprüfe die Höhe, weil das div bereits Kinder hat, genauer gesagt eine Tabelle. Der AJAX-Aufruf fügt der Tabelle Zeilen hinzu (ersetzt sie durch eine neue mit derselben ID). Irgendeine Idee, wie ich das besser erkennen könnte? Ich habe über WaitForElement * -Funktionen gelesen, aber ich sehe sie nicht für mich verfügbar. – JamesArmes

+0

JamesArmes: Wenn der Aufruf Zeilen hinzufügt, speichern Sie einfach die Anzahl der Zeilen, bevor Sie den Anruf tätigen. Vergleichen Sie dann die Anzahl der Zeilen und sehen Sie, ob sie sich geändert hat, also etwa wie $ ("# tableId tr"). Size()> [alte Größe hier] '. –

+0

John Feminella: Ich habe das versucht, aber es scheint nur die Ausführung fortzusetzen, als ob die Bewertung sofort als richtig bewertet wurde. Ich habe sogar versucht, einen Literalwert anstelle einer Variablen einzugeben, von der ich wusste, dass sie mehr als die ursprüngliche Tabelle und weniger als die neue war, ohne Unterschied. Nur um zu sehen, was passieren würde, setzte ich es auch auf eine Zahl, die viel höher war, als jeder Tisch es hätte, und es setzte einfach die Ausführung fort. – JamesArmes