自從把Robot的御用BrowserFireFox改成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 IDElementXPathAssign一個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,在閱讀上方便許多。

  後面的MyAccountSignOut也是被AssignTemp Element Id,而Assign Temp ID之前一定要先確定這個XPath ElementWeb頁面中是可見的,否則會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 UserIDaria-expanded屬性為false,就要把鼠標移到UserID Element上,這是因為只要把滑鼠移入UserID Element,就可以把aria-expanded變成true,若移出,則aria-expanded又變為false

而只有在aria-expanded=true的情況下,My Account/Sign Out 才會出現,所以一開始因為mousemouse 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-expandedfalse 變成 true,使My Account/ Sign Out再次出現(如果滑鼠自上次移入後未來移出過,這時候再Mouse Over一次就不會再改變狀態,所以這邊用Click Element來改變狀態)

  這個Test Case的成功關鍵就在於能不能點中My Account/Sign Out這兩個隱藏的Element,而當UserIDaria-expanded屬性為true時這兩個Element方為可見,因此就要摸清楚UserIDaria-expanded屬性什麼條件下會改變,本題只有兩種狀況會改變:一是滑鼠移入UserID元素;二是在UserID上按滑鼠左鍵,然後要透過Get Element Attribute    UserID@aria-expanded 來取得aria-expanded之值,再依據該值判斷是否需要mouse overclick element來保證My Account/Sign Out為可見。

 

201894日星期二

文章標籤
創作者介紹
創作者 jackterrylau 的頭像
jackterrylau

儒道哲學的浪漫人生

jackterrylau 發表在 痞客邦 留言(0) 人氣()