簡體   English   中英

通過 WebDriver 執行的操作不會觸發模糊事件

[英]Actions through WebDriver will not trigger the blur event

我有一個帶有兩個下拉菜單的網頁。 在一個下拉列表中選擇一個選項將通過模糊事件觸發的腳本更新另一個下拉列表中的選項列表。 當焦點移離第一個下拉菜單時會觸發模糊事件。 手動導航頁面時,這一切正常。

但是,當通過 WebDriver 執行相同的步驟時,永遠不會觸發模糊事件,因此下拉列表永遠不會更新,導致我的腳本失敗。

這是我首先選擇的下拉列表的 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>

這是我迄今為止嘗試過的:

像我手動一樣導航頁面
我在下拉列表中進行選擇,然后在另一個字段中輸入文本以將焦點從下拉列表中移開以觸發模糊事件。 這沒有用。 我也試過跳出下拉菜單,也沒有運氣。

執行 Javascript 來觸發模糊事件
我知道 Javascript 是正確的,因為我可以從 firebug 成功運行它:它會觸發第二個下拉列表的更新。 但是,從 WebDriver 看來,它似乎沒有觸發任何東西。

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

有什么建議么? 謝謝你的幫助。

編輯:我嘗試在腳本字符串中添加“返回”。 也沒有用:

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

這里有幾個想法:

使用 TAB 轉到下一個字段。 這將模擬用戶點擊 TAB 鍵進入下一個字段,理論上應該模擬瀏覽器的模糊事件。

您可以使用 sendKeys 方法執行此操作:

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

注入javascript來模擬blur方法。 您已經嘗試過它看起來像這樣,但是您忘記了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);

另一種選擇是嘗試觸發對輸入之外的其他東西的點擊,比如身體。

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

這對我有用。

嘗試使用 Actions 類,WebDriver 支持使用此類的鼠標和用戶交互 類似這樣的:

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

這將移動您設置的盡可能多的像素並觸發模糊事件

通常在 html 頁面中,當我們單擊任何元素時,我們實際上是通過模糊當前元素來關注該元素。 因此,您可以單擊任何其他不會在單擊時觸發任何內容的元素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM