5

2 つのドロップダウンがある Web ページがあります。一方のドロップダウンでオプションを選択すると、blur イベントによってトリガーされるスクリプトを通じて、もう一方のドロップダウンのオプションのリストが更新されます。フォーカスが最初のドロップダウンから離れると、blur イベントがトリガーされます。ページを手動でナビゲートする場合、これはすべて正常に機能します。

ただし、WebDriver を使用して同じ手順を実行すると、blur イベントがトリガーされず、ドロップダウンが更新されず、スクリプトが失敗します。

最初に選択したドロップダウンの html は次のとおりです (onblur スクリプトが添付されています)。

<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>

これが私がこれまでに試したことです:

手動でページをナビゲートする
には、ドロップダウンで選択を行い、別のフィールドにテキストを入力してドロップダウンからフォーカスを移動し、blur イベントをトリガーします。これはうまくいきませんでした。また、ドロップダウンからタブを押してみましたが、運もありませんでした。

Javascript を実行してぼかしイベント
をトリガーする Firebug から正常に実行できるため、Javascript が正しいことはわかっています。2 番目のドロップダウンの更新がトリガーされます。ただし、WebDriver からは何もトリガーされないようです。

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

助言がありますか?ご協力いただきありがとうございます。

編集:スクリプト文字列に「return」を追加してみました。また、動作しませんでした:

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

4 に答える 4

6

ここにいくつかのアイデアがあります:

TAB を使用して次のフィールドに移動します。これは、ユーザーが TAB キーを押して次のフィールドに進むことをシミュレートし、理論的にはブラウザーのぼかしイベントをシミュレートする必要があります。

sendKeys メソッドを使用してこれを行うことができます。

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

javascript を挿入して、blur メソッドをシミュレートします。あなたはすでにこれを試してみましたが、あなたは 1 つの重要な側面を忘れていましたexecuteScript-常にreturnあなたのコードです!

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

最後に、情報提供のみを目的として、使用しているブラウザを含めると役立つ情報です。

アップデート

これを試して、要素に直接フォーカスを与えてから、フォーカスを外します (ぼかします):

WebElement element = driver.findElement(By.id('newOrder:shipToAddressType'));
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("arguments[0].focus(); arguments[0].blur(); return true", element);
于 2013-05-11T04:02:38.220 に答える
5

別のオプションは、本文など、入力以外の何かをクリックしてトリガーすることです。

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

これは私のために働いています。

于 2017-05-26T16:23:04.560 に答える
1

Actions クラスを使用してみてください。WebDriver は、このクラスを使用してマウスとユーザーの操作をサポートします。

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

これにより、設定した数のピクセルが移動し、ぼかしイベントがトリガーされます

于 2015-01-13T13:12:40.407 に答える