2

我試圖測試一個頁面包含一個元素,當頁面第一次打開時,其style = attribute屬性設置爲display: none;。在Firefox中,當測試與頁面交互時(現在爲兩個文本字段),該按鈕已啓用,並且可以通過編程方式進行點擊。然而,在IE8中,即使我嘗試手動點擊該按鈕,如果頁面與測試進行了交互,該按鈕也不能被點擊。這是代碼的樣子:在Watir中,我如何與最初「隱藏」的元素進行交互?

<a tabindex="21" onclick="if(!allow_submit() || nextStepLocked()){return false;};; new Ajax.Request(saveInfo); return false;" id="nextStepButton" href="#" class="nextButton" style="display: none;"> 
    <img src="/btn_next_step.png" alt="Btn_next_step"> 
</a> 
<img style="" src="/btn_next_step.png?" id="hiddenNextStepButton" class="nextButton" alt="Btn_next_step"> 

有導致此一個頁面上的類似的塊,而我可以點擊它只是罰款與代碼browser.image(:alt => "Btn_next_step").click。我還注意到,當圖像從不可點擊的狀態切換到可點擊的狀態時,它會向上移動幾個像素;如果我在代碼中觸發可點擊狀態,則會發生相同的移動,但該按鈕不會變爲可點擊。

到目前爲止,我已經嘗試過使用AutoIt來模仿通常在頁面上採取的操作,並且我還嘗試了許多與圖像交互的不同方式,例如引用不同的索引,一次使用多種識別方法,以及等等。我甚至嘗試在irb中搞亂,但無濟於事。

更新:

我檢查輸入字段,他們確實迴應的onchange事件,而只是利用你輸入的文本的第一個字母。由於按鈕似乎如果我這樣做只是在頁面上任何工作,我經歷了整個源看了一下,發現在頁面的末尾以下內容:

<script> 
    document.onkeydown=function(e){ 
     accession_hotkeys(e); 
    }; 
</script> 

我不知道如何正確地觸發此事件,但是。在任何特定元素上執行它似乎都沒有影響。

+0

如果您還可以向我們展示輸入字段上的HTML(請參閱下面的答案),這會有所幫助,因爲我懷疑可能會在某些特定事件發生時針對這些字段發生一些情況。 – 2011-03-02 18:31:18

回答

1

這將是一個評論,但我還沒有代表。如果您可以在沒有WATiR的情況下單擊它,那麼您可以使用代碼here使用頂級硬件單擊使用WATiR單擊它。如果不是,請忽略此答案。

該代碼無論如何都是有用的,它使用鼠標指針在最高級別進行實際的鼠標點擊。如果你不能在WATiR中與它互動,並且你不能與它互動,那麼我會說你最好用Dave的答案比我的更好。

+0

我遇到了一些與你的代碼(未初始化的常量WindowsInput :: Win32API(NameError))有關的問題,我通過使用稍微修改過的版本修正了這些問題:[link](http://wiki.openqa.org/display/ WTR /右+點擊+的+元素)。唯一需要注意的是,我必須在打開窗口後最大化窗口,但我認爲我可以用AutoIt的某些功能以編程方式執行此操作。 – Roderick 2011-03-02 14:53:51

+0

感謝您的反饋,我會更新原始代碼以匹配。我很高興他們把它放在openqa wiki上,我最初在一段時間之前就已經掌握了它。很高興有幫助! – kinofrost 2011-03-02 17:22:18

+1

恕我直言,訴諸自動化是一個蠻力的解決方法..只要所有的控件都在瀏覽器中,而不是某種彈出式警報或類似的東西,這應該可以通過watir而不需要autoit的幫助。我不認爲這個網頁是你可以與我們分享的公共場所嗎? – 2011-03-03 00:55:29

0

我的猜測是,你必須要找到它的JavaScript事件火災:How to find out which JavaScript events fired?

+0

我已經試過了。我遇到的主要問題是,我無法確定哪些事件正在觸發,因爲無論它是什麼,它都會激活,因爲我可以記錄有問題的元素。如果我刷新,我必須重新啓用該元素上的日誌記錄。 – Roderick 2011-03-02 15:44:41

1

而不是試圖找出你的JavaScript調用,或設置你操縱,我建議想看看「自然」發生這種事情需要什麼人類與該網站進行互動。請仔細看看輸入字段的HTML,看看它們是否有線以在發生某些事件時觸發javascript腳本(我懷疑'onchange')

Firewatir和Watir不是從公共代碼庫派生的(更像是在事後合併),而且很可能是當設置字段時,firewatir正在設置這些事件,但watir不是。另一種可能性是,firewatir代碼可能剛好足夠慢,當它點擊按鈕時,客戶端代碼就可以改變按鈕的狀態,而這一點在IE端尚未發生。

可能需要的是,您可以按照所需方式設置值,然後根據輸入元素觸發特定事件。再次,我懷疑它會'onchange',但不能確定沒有看到你的HTML。

您可能需要做的另一件事是確保代碼等待足夠長的時間以便任何客戶端腳本進行更改,因此我建議在嘗試點擊按鈕之前嘗試一秒睡眠。

通常我會使用IRB會話來解決這類問題,因爲它可以讓我按自己的步調執行設置值,觸發事件等事情,並且可以在完成每件事情後檢查頁面的狀態。例如,在元素上觸發一個事件並查看頁面是如何依次響應的。 (這在腳本速度上很難做到)。同樣,如果事情在IRB中工作,但不是當完全相同的代碼作爲腳本執行時,問題幾乎總是腳本「做得太快」,並且您需要插入一些延遲以允許客戶端代碼執行這是特定腳本步驟之間的事情。

+0

無論如何,我認爲它必須在任何.set之前完成。如果我做.set並停止腳本,我完全無法點擊按鈕,甚至手動。 – Roderick 2011-03-07 14:52:19

0

在黑暗中再射,因爲它似乎是在尋找任何一種「的keydown」事件對整個文檔..我不知道是否

browser.fireEvent(onkeydown) 

會的工作?

相關問題