2011-01-14 4 views

Antwort

1

normalerweise Ihre Lösung, indem man den JavaScript-Code gefunden wird ..

Eine Option haben Sie immer in dem Wert zu setzen sind und das tatsächliche OnChange Ereignis von Code manuell auslösen.

Es gibt ein offenes Problem zu diesem link text Problem mit FireFox Windows nicht aktiv ist und verhindert, dass die OnChange ausgelöst wird.

die Sie interessieren vor typeKeys Befehl:

selenium.selectWindow(null); 
+0

Ich verwende IDE. Das habe ich getan. [#Ausführung: | getEval | selen.selectWindow (null) || ] Funktioniert nicht. Fehler: selen.selectWindow ist keine Funktion –

+0

Ich arbeite normalerweise nur mit Selenium RC und ich bin mir nicht sicher, ob es sogar möglich ist, einige der Probleme mit der IDE zu lösen .. Sie sollten Ihre Frage mit dieser Info – StefanE

3

Wenn Sie mit Selenium 1.x gibt es einen Befehl, der fireevent Sie verwenden können, um manuell die onChange Ereignis auslösen nach der Eingabe des Wertes. Vielleicht würde das dein Problem lösen?

1

Dieser arbeitete für mich in IDE die folgenden drei Befehle, um sieht

Typekeys targetID input 
FireEvent targetID focus 
Type  targetID input 

Die Quelle gehen sie wie folgt

(Eingangs Brief r war)
<tr> 
<td>typeKeys</td> 
<td>//form/input</td> 
<td>r</td> 
</tr> 
<tr> 
<td>fireEvent</td> 
<td>//form/input</td> 
<td>focus</td> 
<tr> 
<td>fireEvent</td> 
<td>//form/input</td> 
<td>focus</td> 
</tr> 
<tr> 
<td>type</td> 
<td>//form/input</td> 
<td>r</td> 
</tr> 
</tr> 
<tr> 
<td>type</td> 
<td>//form/input</td> 
<td>r</td> 
</tr> 
8

Um das onchange Ereignis auslösen, versuchen Hinzufügen dieses Befehls in Selenium IDE:

fireEvent targetID blur

+0

aktualisieren Dies sollte sein die angenommene Antwort (IMHO). Das war * genau * was ich brauchte! Auch in meinem Fall musste dies mit 'sendKeys' anstelle von' type' verwendet werden. Vielen Dank dafür, @trex. – OscuroAA

5

Firefox hat eine bug, die verhindert, dass einige Ereignisse ausgeführt werden, während das Browserfenster nicht im Fokus ist. Dies kann ein Problem sein, wenn Sie Ihre Automatisierungstests ausführen - die möglicherweise auch dann eingeben, wenn das Fenster nicht im Fokus ist.

um dieses Problem zu beheben ausgelöst ich das Änderungsereignis „von Hand“, Javascript in meinen Tests Injektion .:

//suppose "element" is an input field 
element.sendKeys("value"); 
JavascriptExecutor jsExecutor = (JavascriptExecutor) driver; 
jsExecutor.executeScript("$(arguments[0]).change();", element); 

Wie Sie vielleicht bemerkt haben, ich jQuery bin mit dem Change-Ereignis auszulösen. Wenn Sie jQuery nicht in Ihrer App verwenden, können Sie überprüfen, ob es mit Vanilla-Javascript ausgelöst wird, here.

Hoffe, dass jemand hilft.

+0

Scheint nicht für Dateieingabefelder zu funktionieren – ndtreviv

0

Ich hatte ein ähnliches Problem, mit einer Dropdown-Liste mit Ajax gemacht.
Da die Benutzertypen in einem Feld, das System AJAX zeigt div w mit mehreren Optionen, die jeweils als Verbindung mit target='#'

Und noch schlimmer ist, war es eine Funktion auf dem onChange() genannt, die ein gefüllten System-Flag, und das Flag würde als eine Validierung auf der form.submit() verwendet werden (oh, der Schmerz)

Anyways, meine Lösung dafür:
1 - Selen Sendkeys Befehl so die Ajax div würde erscheinen

<tr> 
    <td>sendKeys</td> 
    <td>id=txtTipoDocumento</td> 
    <td>ipsum lorem</td> 
</tr> 

2 - warten Sie auf den Link mit der erwarteten Option erscheinen

<tr> 
    <td>waitForElementPresent</td> 
    <td>link=ipsum lorem</td> 
    <td></td> 
</tr> 

3 - Selen clickAt den Link

<tr> 
    <td>clickAt</td> 
    <td>link=ipsum lorem</td> 
    <td>10,20</td> 
</tr> 


4 - Hier ist die von die Fänge: manuell feuern die onChange() AND Unschärfe Ereignisse. Auch foce den Browser Fokus auf verschiedene Feld

<tr> 
     <td>fireEvent</td> 
     <td>id=txtTipoDocumento</td> 
     <td>blur</td> 
    </tr> 
    <tr> 
     <td>fireEvent</td> 
     <td>id=selSerie</td> 
     <td>change()</td> 
    </tr> 
    <tr> 
     <td>fireEvent</td> 
     <td>id=selSerie</td> 
     <td>blur</td> 
    </tr> 
    <tr> 
     <td>focus</td> 
     <td>id=imgDataElaboracao</td> 
     <td></td> 
    </tr> 

5 gesetzt - schließlich sicher sein, ich Selen führe die ClickAt() Befehl auf der Schaltfläche Absenden der Form, zwischen ein mouseDown- und MouseUp Befehle

<tr> 
    <td>mouseDown</td> 
    <td>id=btnSalvar</td> 
    <td></td> 
</tr> 
<tr> 
    <td>focus</td> 
    <td>id=btnSalvar</td> 
    <td></td> 
</tr> 
<tr> 
    <td>clickAt</td> 
    <td>id=btnSalvar</td> 
    <td>10,20</td> 
</tr> 


Nicht elegant, aber es funktionierte.

Verwandte Themen