2013-05-10 9 views
5

Ich habe eine Webseite mit zwei Dropdowns. Wenn Sie eine Option in einem Dropdown-Menü auswählen, wird die Liste der Optionen im anderen Dropdown-Menü durch ein Skript aktualisiert, das durch das Blur-Ereignis ausgelöst wird. Das Blur-Ereignis wird ausgelöst, wenn sich der Fokus vom ersten Dropdown-Feld entfernt. Dies alles funktioniert gut, wenn Sie die Seite manuell navigieren.Aktionen über WebDriver lösen das Unschärfeereignis nicht aus

Wenn jedoch die gleichen Schritte über WebDriver ausgeführt werden, wird das Blur-Ereignis nie ausgelöst und das Dropdown-Menü wird daher nie aktualisiert, wodurch mein Skript fehlschlägt.

Hier ist der HTML-Code für die Drop-Down-I zuerst auswählen (und die die onblur Skript mit ihm verbunden hat:

<select id="newOrder:shipToAddressType" class="fieldRequired"  onblur="PrimeFaces.ab({source:this,event:'blur',process:'newOrder:odShipData',update:'newO>rder:odShipData',partialSubmit:true,oncomplete:function(xhr,status,args)>{focusOnShipToZip();;}}, arguments[1]);" tabindex="47" size="1" name="newOrder:shipToAddressType"> 
<option selected="selected" value="125">Domestic</option> 
<option value="126">International</option> 
<option value="127">Military</option> 
</select> 

Hier ist, was ich bisher ausprobiert habe:

Navigation auf der Seite, wie ich würde manuell Ich mache die Auswahl im Dropdown, dann geben Sie Text in einem anderen Feld ein, um den Fokus weg von der Dropdownliste zu verschieben, um das Unschärfeereignis auszulösen.Dies hat nicht funktioniert.Ich habe auch versucht, Tab aus dem Dropdown, auch nein Glück

Ausführen von Javascript zum Auslösen des Unschärfeereignisses Ich weiß, dass das Javascript korrekt ist, da ich es erfolgreich von Firebug ausführen kann: es löst ein Update des zweiten Dropdowns aus. Von WebDriver scheint es jedoch nichts auszulösen.

JavascriptExecutor js = (JavascriptExecutor) driver; 
js.executeScript("document.getElementById('newOrder:shipToAddressType').blur()"); 

Irgendwelche Vorschläge? Danke für Ihre Hilfe.

Edit: Ich habe versucht, 'Return' zum Skript-String hinzuzufügen. Auch hat nicht funktioniert:

JavascriptExecutor js = (JavascriptExecutor) driver; 
js.executeScript("return document.getElementById('newOrder:shipToAddressType').blur()"); 

Antwort

5

Hier sind ein paar Ideen:

ein TAB verwenden, um zum nächsten Feld zu gehen. Dies würde einen Benutzer simulieren, der die TAB-Taste drückt, um mit dem nächsten Feld fortzufahren, und sollte theoretisch das Unschärfeereignis des Browsers simulieren.

Sie können dies tun, indem Sie die Sendkeys-Methode:

WebElement element = driver.findElement(By.id('newOrder:shipToAddressType')); 
element.sendKeys("\t"); 

Javascript Injizieren Sie die Unschärfe Methode zu simulieren. Sie haben bereits versucht, dies zu versuchen sieht so aus, aber Sie haben vergessen einen wichtigen Aspekt von executeScript - immer return Ihr Code!

JavascriptExecutor js = (JavascriptExecutor) driver; 
js.executeScript("return document.getElementById('newOrder:shipToAddressType').blur()"); 

Eine letzte Sache, wäre es hilfreich Informationen enthalten, welchen Browser Ihre verwenden, nur zu Informationszwecken.

UPDATE

Versuchen Sie, diese direkt Fokus auf das Element zu geben, und dann unfocus (Blur) es:

WebElement element = driver.findElement(By.id('newOrder:shipToAddressType')); 
JavascriptExecutor js = (JavascriptExecutor) driver; 
js.executeScript("arguments[0].focus(); arguments[0].blur(); return true", element); 
+0

Danke für die Eingabe. Ich hatte das Tabbing bereits versucht (siehe meinen ursprünglichen Post), aber ich hatte noch nicht versucht, die Rückkehr hinzuzufügen. Ich werde es versuchen. Vielen Dank. – user973718

+0

'Rückkehr' zu meiner JavaScript-Zeichenfolge hinzugefügt. Keine Änderung: Kein Blur-Ereignis ausgelöst. Diese Option wurde dem OP – user973718

+0

hinzugefügt. Bitte stellen Sie in Ihrem Javascript sicher, dass das WebDriver-Element an Sie zurückgegeben wird, indem Sie die Datei '.blur()' entfernen. Ihre 'js'-Variable sollte ein WebDriver-Element enthalten. Wenn das nicht der Fall ist, funktioniert die Unschärfe nicht ... es kann das Element nicht richtig finden! Wenn es so ist, werden wir von dort weitermachen. – bbbco

0

Versuchen Sie, die Aktionen Klasse, WebDriver Unterstützung Maus und Interaktion mit dem Benutzer unter Verwendung dieser mit Klasse Etwas wie folgt aus:

WebElement element = driver.findElement(By.id('newOrder:shipToAddressType')); 
(new Actions(driver)).moveToElement(element ,500,500).build().perform(); 

Dies wird so viele Pixel bewegen, wie Sie es einrichten und trigger the blur event

2

Eine andere Möglichkeit ist, einen Klick auf etwas neben der Eingabe auszulösen, wie den Körper.

driver.findElement(By.tagName("body")).click(); 

Dies funktioniert für mich.