2015-10-02 85 views
1

目前我正在嘗試處理通過JavaScript方法添加的動態內容。我希望檢索實際顯示的內容,並通過RobotFramework進行檢查。Robotframework:如何通過JavaScript處理動態內容

被寫入到幀被定義爲:

<frame src="/root/paperform/blank.htm" name="paperform" marginwidth="0" marginheight="0" leftmargin="0" topmargin="0" scrolling="auto" noresize="" framespacing="0"> 

現在,若干方法之一可能被稱爲,例如以下: <form name="goNoPluginForm" action="/servlet/PFServlet" method="POST" target="paperform"> <input type="hidden" name="template" value="paperform/error/noPlugin.htm"> </form>

張貼的錯誤是我想什麼檢索。我試圖使用「頁面應該包含」和「頁面應該包含元素」的關鍵詞,這兩者都沒有帶來正確的結果。我確實有這個關鍵字的感覺,他們只檢查最初的網頁源代碼。

現在,我該如何檢查哪些錯誤消息已發佈到框架中?

我已經通過「選擇框架」關鍵字選擇了框架,這也成功了。 檢索框架的實時內容是,我目前卡住的地方。我花了一段時間研究這個問題,但是我無法找到解決問題的答案。請讓我知道,如果你需要更多的信息來回答我的問題。手動調用網頁時,所有工作都按預期進行。

增加:

我已經嘗試使用 「等到關鍵字則成功」,一個例子:

Wait Until Keyword Succeeds ${ElementSearchTime} 1s Page Should Contain Element ${XPath_PluginElement} 

又如:

Wait Until Keyword Succeeds ${ElementSearchTime} 1s Page Should Contain You could still view your document 

這不幸的是沒有足夠的想要的結果。對我來說,如果第一次收到的代碼沒有更新,並且「頁面應該包含元素」可能不是應該使用的關鍵字。

編輯:是的,我是正確的。我應該使用Selenium2Library中的「Current Frame Contains Element」關鍵字。

回答

1

您是否嘗試過使用Wait Until Keyword Succeeds?過去我覺得有點不對勁,但我被其他比我更有經驗的人告訴過,這就是要走的路。它也讓我從類似的場景中醃出一種用戶點擊產生行崩潰並且JavaScript幫助渲染我們需要的任何東西。當我開始工作時,我會發布我自己的示例,但這裏是來自內置文檔的基本形式(http://robotframework.org/robotframework/latest/libraries/BuiltIn.html#Wait%20Until%20Keyword%20Succeeds):

如果關鍵字不管重試都不成功,則此關鍵字將失敗。如果執行的關鍵字通過,則返回其返回值。

Wait Until Keyword Succeeds 2 min 5 sec My keyword argument 
${result} = Wait Until Keyword Succeeds 3x 200ms My keyword 

所有正常的故障都被這個關鍵字捕獲。無效語法,測試或關鍵字超時或致命異常(例如由致命錯誤引起)導致的錯誤不會被捕獲。

在關鍵字內多次運行相同的關鍵字可以創建大量的輸出並顯着增加生成的輸出文件的大小。從Robot Framework 2.7開始,可以使用--RemoveKeywords WUKS命令行選項從輸出中刪除不必要的關鍵字。 支持將重試次數指定爲重試次數是Robot Framework 2.9中的一項新功能。自Robot Framework 2.9以來,變量錯誤被這個關鍵字捕獲。

真實世界的例子如許

${row_link_state}= Selenium2Library.Get Element Attribute ${STATIC_TABLE_XPATH}/tbody/tr/td/[email protected] 
Run Keyword If '${row_link_state}' == '${TABLE_LINK_CLASS_COLLAPSED}'  Click Element ${STATIC_TABLE_XPATH}/tbody/tr/td/a 
... ELSE Fail The row link was not in the expected state 
Wait Until Page Contains Element ${STATIC_TABLE_XPATH}/tbody/tr/td/div/p 10 
Wait Until Keyword Succeeds 10s 5s Element Should Be Visible ${STATIC_TABLE_XPATH}/tbody/tr/td/div/p 
${paragraph_text}= Get Text ${STATIC_TABLE_XPATH}/tbody/tr/td/div/p 
Should Be Equal ${STATIC_TABLE_ROW1_TEXT} ${paragraph_text} 

我知道上面的代碼塊看起來很討厭。本質上它是檢查一個錶行處於預期的狀態,由javascript處理。有問題的鏈接在兩個值之間滑動以描述其狀態。如果它處於預期狀態,我們單擊表格行,使其展開並顯示其內容。您會注意到Wait Until Page Contains已經過時了,但它仍然有點不穩定,它的存在似乎讓事情變得緩慢,足以讓它產生可重複的結果。等到關鍵字成功後,才能確保我想要使用的文本在頁面上可見,然後再嘗試獲取並將其用作變量。這是我能夠完成上述工作的唯一途徑。

看看你是否有成功與上述,如果你有麻煩,張貼在這裏的代碼和問題,我會幫助。

+0

你好,非常感謝你的詳細解答。我已經嘗試了Wait Until Keyword Succeds關鍵字,但不幸的是沒有達到想要的效果。我要將代碼添加到問題中。謝謝您的幫助。 – Aldaris

+0

您在示例中設置的時間不會工作得很好,第一次是總等待時間,因此在文檔示例中,它將總共等待兩分鐘以找到您設置的外觀對於。第二次是時間間隔,所以在文檔示例中,雖然它等待了兩分鐘,但它正在每5秒鐘對您設置的內容進行檢查。我想你知道這一點,只是更詳細地介紹。那麼什麼是$ {ElementSearchTime}值?你也確定你的xpath是正確的嗎? – shicky

+0

您是否設置了測試失敗截圖?如果我是你,我會進入調試模式並檢查頁面在執行檢查時的樣子。你能否提供更多關於你認爲不適用的例子的失敗信息? – shicky