Ich entwickle eine Bibliothek, die Selenium 2 mit einigen benutzerdefinierten Befehlen erweitert. Die Bibliothek sollte sowohl von Seleniums Java und Python Bindings als auch in Selenium IDE verwendbar sein. Von meiner research sollten diese drei Zielbindungen mindestens 80% aller Selenium 2-Skripte abdecken.Selenium WebDriver: In welchem Umfang kann ich auf JavaScript zurückgreifen?
Um meine benutzerdefinierten Befehle für Selenium IDE zu implementieren, denke ich, ich muss ein Plugin dafür in JavaScript schreiben.
Meine Frage ist diese: Wenn ich bereits eine Implementierung meiner benutzerdefinierten Befehle in JavaScript habe, ist es sicher, diese Implementierung für die Java-und Python-Bindungen meiner Bibliothek zu verwenden?
Ich denke an einen Ansatz, der die JavaScript-Implementierung meiner Befehle über WebDriver#executeScript
injiziert. Hier ist eine Pseudocode-Implementierung von dem, woran ich denke.
In Java:
public void fooJava() {
executeScript("Inject code.js");
executeScript("fooJavaScript();");
}
In code.js
:
function fooJavaScript() {
// Implementation of command "foo" from Selenium IDE plugin.
}
Also, zu meinen benutzerdefinierten Befehl fooJava()
in Java ausführen, code.js
meine Bibliothek würden in den Browser über executeScript
injiziert werden. Dies würde eine JavaScript Implementierung von foo
, sagen fooJavaScript
enthalten. In einem nächsten executeScript
Anruf würde dann dieser fooJavaScript
aufgerufen werden.
Während dieser Ansatz mich mit verhindern würde meine Gewohnheit implementieren Befehle dreimal (Java, Python, Selenium IDE), ich habe ein paar Bedenken:
- Wenn ich spritze meine
code.js
, bin ich in Gefahr den globalen Zustand der Website zu zerstören? - In welchem Umfang kann ich auf JavaScript zurückgreifen? Funktioniert es, wenn ein Alarmdialog vorhanden ist? In der Praxis, wie viele der Treiber, die mit Selenium verwendet werden, unterstützen nicht JavaScript? Z.B.
HtmlUnit
? - Funktioniert das in allen gängigen Browsern (etwas neuere Versionen von IE, Chrome, Firefox, Safari)?
Ihre realen Erfahrungen damit würden sehr geschätzt werden.
von meinen "realen Erfahrungen" .. ich _arely_ benötigt, um sogar Javascript beim Testen zu verwenden. Meiner Meinung nach ist es ein schlechtes App-Design, wenn man ein JavaScript-Event auslösen muss. Es ist im Allgemeinen nur ein schlechtes Design, um von der Benutzeroberfläche wegzuspalten. Ich meine, das tust du gerade, oder? – sircapsalot