自從把Robot的御用Browser從FireFox改成PhantomJS之後,Robot似乎有點鬧脾氣,有些UI操作變得不是那麼容易,需要給Robot一點更精細的操作指令他才願意好好的操作Browser,真是不肖子的Robot。
這邊有一個Test Case:
[PP](XSP)(NABU) WFBSS [Tags] QA Set Selenium Speed 0.5s Open Browser ${WFBSS_Host}/?TenantID=${XSP_WFBSS_NABU_TenantID} PhantomJS Wait Until Element Is Visible name=username 30 Element Should Be Visible name=username Input Text name=username ${XSP_WFBSS_NABU_UserID} Input Text name=password ${XSP_WFBSS_NABU_Password} Click Button id=btn_logon
Wait Until Element Is Visible xpath=//*[@id='viewport']/div[1]/header/div[2]/div[4]/div[1] 60 Assign Id To Element xpath=//*[@id='viewport']/div[1]/header/div[2]/div[4]/div[1] UserID Element Should Contain UserID ${XSP_WFBSS_NABU_UserID} Comment Mouse Over UserID ${C} Get Element Attribute UserID@aria-expanded RunKeyword If '${C}' == 'false' Mouse Over UserID Assign Id To Element xpath=//*[@id='viewport']/div[1]/header/div[2]/div[4]/div[2]/div[1]/div[1] MyAccount Wait Until Element Is Enabled MyAccount 30 Wait Until Element Is Visible MyAccount 30 Click Element MyAccount
Select Window NEW Wait Until Element Is Visible xpath=//a[@href="${WFBSS_Host}/?TenantID=${XSP_WFBSS_NABU_TenantID}"] 30 Close Window
Select Window MAIN Assign Id To Element xpath=//*[@id='viewport']/div[1]/header/div[2]/div[4]/div[2]/div[2]/div[1] SignOut ${C} Get Element Attribute UserID@aria-expanded RunKeyword If '${C}' == 'false' Click Element UserID Wait Until Element Is Enabled SignOut 30 Wait Until Element Is Visible SignOut Click Element SignOut Wait Until Element Is Visible name=username 30 Go To ${CLP_Host}/Dashboard?T=${XSP_WFBSS_NABU_TenantID} Wait Until Element Is Visible name=username 30 [Teardown] Close All Browsers |
這邊就不細述Test Case的每一行在做什麼,我只講兩個我覺得是要特別紀錄下來以免未來忘記的地方。
首先,我們應該為原本沒有Element ID的Element之XPath,Assign一個Temp ID給他,用到的Selenium2Library Keyword為:Assign Id To Element {Locator XPath} {Temp ID}。
這樣做有一個好處,就是提高XPath元素在Test Case的可閱讀性,例如我就透過Assign Id To Element 給與XPath為//*[@id='viewport']/div[1]/header/div[2]/div[4]/div[1] 的元素一個ID名稱UserID,之後便可以在用到UserID Element的地方直接以UserID取代XPath,在閱讀上方便許多。
後面的MyAccount與SignOut也是被Assign的Temp Element Id,而要Assign Temp ID之前一定要先確定這個XPath Element在Web頁面中是可見的,否則會Assign ID Fail。這也是為何在Assign Id To Element xpath=//*[@id='viewport']/div[1]/header/div[2]/div[4]/div[1] UserID
之前需要先做Wait Until Element Is Visible xpath=//*[@id='viewport']/div[1]/header/div[2]/div[4]/div[1] 60
的原因,若這兩句對調那就會有問題了。
然後,你會看到我Test Case有底下挺多餘的Statement:
這一段是說,若是Element UserID的aria-expanded屬性為false,就要把鼠標移到UserID Element上,這是因為只要把滑鼠移入UserID Element,就可以把aria-expanded變成true,若移出,則aria-expanded又變為false。
而只有在aria-expanded=true的情況下,My Account/Sign Out 才會出現,所以一開始因為mouse未mouse over UserID,所以aria-expanded=false,故為了讓My Account/Sign Out出現,必需要判斷aria-expanded若為false則把滑鼠移到UserID元素使其變成True。
之後在過去CLP頁面之後再回來WFBSS頁時,這時候要再判斷一次aria-expanded是否為true,因為經過一些頁面跳轉之後,aria-expanded有可能又改變狀態,所以要再檢查一次它的值。而由於我們Click UserID亦會使aria-expanded再次改變,所以這邊就用Click Element UserID 將aria-expanded由false 變成 true,使My Account/ Sign Out再次出現(如果滑鼠自上次移入後未來移出過,這時候再Mouse Over一次就不會再改變狀態,所以這邊用Click Element來改變狀態)。
這個Test Case的成功關鍵就在於能不能點中My Account/Sign Out這兩個隱藏的Element,而當UserID的aria-expanded屬性為true時這兩個Element方為可見,因此就要摸清楚UserID的aria-expanded屬性什麼條件下會改變,本題只有兩種狀況會改變:一是滑鼠移入UserID元素;二是在UserID上按滑鼠左鍵,然後要透過Get Element Attribute UserID@aria-expanded 來取得aria-expanded之值,再依據該值判斷是否需要mouse over或click element來保證My Account/Sign Out為可見。
2018年9月4日星期二
留言列表