From 0298efcb505afffc32b048b6c5a76ddf4f1f97a5 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Mon, 28 Nov 2016 18:38:28 -0600 Subject: [PATCH] [FIX] Various fixes to get it to work with Odoo 9.0 EE --- odoo_9_0_EE.robot | 99 +++++++++++++++++++---------------------------- 1 file changed, 40 insertions(+), 59 deletions(-) diff --git a/odoo_9_0_EE.robot b/odoo_9_0_EE.robot index cc78d41..556b9c5 100644 --- a/odoo_9_0_EE.robot +++ b/odoo_9_0_EE.robot @@ -6,24 +6,27 @@ Documentation Common keywords for OpenERP tests ... imported here so that no other file needs to import it. Library Selenium2Library Library String -Library connection_erp.py -Library Collections -#Library XvfbRobot - +# Library connection_erp.py +# Library Collections +Variables ${CONFIG} +# Library XvfbRobot *** Keywords *** Set Up - Set Global Variable ${ODOO_URL_DB} http://${SERVER}:${ODOO_PORT} - - #ff default caps shoul be always presented +#ff default caps shoul be always present ${ff default caps}= Evaluate sys.modules['selenium.webdriver'].common.desired_capabilities.DesiredCapabilities.FIREFOX sys,selenium.webdriver - #marionette optional, just if we need it + +#marionette optional, just if we need it #Set To Dictionary ${ff default caps} marionette=${True} + log to console Marionette off +#acceptSslCerts should be used always + Set To Dictionary ${ff default caps} acceptSslCerts=${True} - #Virtual display if we want the test to run in background +#Virtual display if we want the test to run in background #Start Virtual Display 1920 1080 + log to console Virtual Display On sidebaraction [Arguments] ${action} sleep 1s @@ -31,30 +34,21 @@ sidebaraction [Arguments] ${action} sleep 1s Click Element //div[@class='o_cp_left']/div[2]/div/div[2]/ul//a[normalize-space(.)='${action}'] # checked: 9.0 ok -Login [Arguments] ${user}=${USER} ${password}=${PASSWORD} ${db}=${ODOO_DB} - Set Global Variable ${ODOO_URL_DB} http://${SERVER}:${ODOO_8_PORT} - Open Browser ${ODOO_URL_DB} browser=${BROWSER} +Login [Arguments] ${user}=${ODOO_USER} ${password}=${ODOO_PASSWORD} ${db}=${ODOO_DB} + Open Browser ${ODOO_URL} browser=${BROWSER} Maximize Browser Window - Go To ${ODOO_URL_DB}/web/database/selector + Go To ${ODOO_URL} Set Selenium Speed ${SELENIUM_DELAY} Set Selenium Timeout ${SELENIUM_TIMEOUT} Set Selenium Implicit Wait ${SELENIUM_TIMEOUT} Click Element xpath=//div[1]/div//a[@href="/web?db=${ODOO_DB}"] - Run Keyword and Ignore error Click element //a[@href="/web/login"] - Wait Until Element is Visible name=login - Input Text name=login ${user} - Input Password name=password ${password} + #run keyword and ignore error Click element //a[@href="/web/login"] + Wait Until Page Contains Element name=login + Input Text name=login ${ODOO_USER} + Input Password name=password ${ODOO_PASSWORD} Click Button xpath=//div[contains(@class,'oe_login_buttons')]/button[@type='submit'] Wait Until Page Contains Element xpath=//nav[contains(@class, 'navbar')] timeout=30 sec -# checked: 9.0 ok -DatabaseConnect [Arguments] ${odoo_db}=${ODOO_DB} ${odoo_db_user}=${ODOO_DB_USER} ${odoo_db_password}=${ODOO_DB_PASSWORD} ${odoo_db_server}=${SERVER} ${odoo_db_port}=${ODOO_DB_PORT} - Connect To Database Using Custom Params psycopg2 database='${odoo_db}',user='${odoo_db_user}',password='${odoo_db_password}',host='${odoo_db_server}',port=${odoo_db_port} - -# checked: 9.0 ok -DatabaseDisconnect - Disconnect from Database - # ok: 90EE BackToMainMenu Click Link xpath=//a[contains(@class, 'o_menu_toggle')] @@ -62,41 +56,38 @@ BackToMainMenu ElementPostCheck # ok: 90EE -MainMenu [Arguments] ${menu} - Click Link xpath=//a[@data-menu='${menu}'] +MainMenu [Arguments] ${menu} + Click Link xpath=//a[@data-testing-menu='${menu}'] Wait Until Page Contains Element xpath=//body[contains(@class, 'o_web_client')] ElementPostCheck # ok: 90EE SubMenu [Arguments] ${menu} - Click Link xpath=//a[@data-bt-testing-sub-menu_id='${menu}'] + Click Link xpath=//a[@data-testing-sub-menu='${menu}'] ElementPostCheck # ok: 90EE SubSubMenu [Arguments] ${menu} - Click Link xpath=//a[@data-menu='${menu}'] + Click Link xpath=//a[@data-testing-sub-sub-menu='${menu}'] ElementPostCheck SubMenuXMLid [Arguments] ${Name} ${MODULE}= Fetch From Left ${Name} . ${NAME}= Fetch From Right ${Name} . - ${SubMenuID}= get_menu_res_id ${ODOO_URL_DB} ${ODOO_DB} ${USER} ${PASSWORD} ${MODULE} ${NAME} + ${SubMenuID}= get_menu_res_id ${ODOO_URL} ${ODOO_DB} ${ODOO_USER} ${ODOO_PASSWORD} ${MODULE} ${NAME} Run Keyword If ${SubMenuID} SubMenu ${SubMenuID} - Run Keyword Unless ${SubMenuID} Fail ERROR: Module or Name not correct - + MainMenuXMLid [Arguments] ${Name} ${MODULE}= Fetch From Left ${Name} . ${NAME}= Fetch From Right ${Name} . - ${MainMenuID}= get_menu_res_id ${ODOO_URL_DB} ${ODOO_DB} ${USER} ${PASSWORD} ${MODULE} ${NAME} + ${MainMenuID}= get_menu_res_id ${ODOO_URL} ${ODOO_DB} ${ODOO_USER} ${ODOO_PASSWORD} ${MODULE} ${NAME} Run Keyword If ${MainMenuID} MainMenu ${MainMenuID} - Run Keyword Unless ${MainMenuID} Fail ERROR: Module or Name not correct - + SubSubMenuXMLid [Arguments] ${Name} ${MODULE}= Fetch From Left ${Name} . ${NAME}= Fetch From Right ${Name} . - ${SubSubMenuID}= get_menu_res_id ${ODOO_URL_DB} ${ODOO_DB} ${USER} ${PASSWORD} ${MODULE} ${NAME} + ${SubSubMenuID}= get_menu_res_id ${ODOO_URL} ${ODOO_DB} ${ODOO_USER} ${ODOO_PASSWORD} ${MODULE} ${NAME} Run Keyword If ${SubSubMenuID} SubSubMenu ${SubSubMenuID} - Run Keyword Unless ${SubSubMenuID} Fail ERROR: Module or Name not correct # checked: 9.0 ok @@ -119,7 +110,7 @@ SelectNotebook [Arguments] ${element} # ok: 90EE IsModal # Check if modal is open - Set Selenium Implicit Wait 1s + Set Selenium Implicit Wait 1s ${modal} ${message}= Run Keyword And Ignore Error Element Should Be Visible xpath=//div[contains(@class,'modal')] #Page should Contain Element xpath=//div[contains(@class,'modal')] Set Selenium Implicit Wait ${SELENIUM_TIMEOUT} @@ -156,7 +147,7 @@ Button ButtonXMLid [Arguments] ${IR_MODEL_DATA_MODEL} ${Model} ${Name} ${MODULE}= Fetch From Left ${Name} . ${NAME}= Fetch From Right ${Name} . - ${ButtonID}= get_button_res_id ${ODOO_URL_DB} ${ODOO_DB} ${USER} ${PASSWORD} ${IR_MODEL_DATA_MODEL} ${MODULE} ${NAME} + ${ButtonID}= get_button_res_id ${ODOO_URL} ${ODOO_DB} ${ODOO_USER} ${ODOO_PASSWORD} ${IR_MODEL_DATA_MODEL} ${MODULE} ${NAME} Run Keyword If ${ButtonID} Button model=${Model} button_name=${ButtonID} ButtonWizard @@ -171,7 +162,7 @@ Many2OneSelect [Arguments] ${model} ${field} ${value} Modal Input Text xpath=//input[@data-bt-testing-model_name='${model}' and @data-bt-testing-name='${field}'] value=${value} Click Link xpath=//ul[contains(@class,'ui-autocomplete') and not(contains(@style,'display: none'))]/li[1]/a ElementPostCheck - + Many2OneSelectWizard [Arguments] ${model} ${field} ${value} SelectNotebook xpath=//input[@data-bt-testing-model_name='${model}' and @data-bt-testing-name='${field}'] Input Text xpath=//input[@data-bt-testing-model_name='${model}' and @data-bt-testing-name='${field}'] ${value} @@ -184,15 +175,12 @@ X2Many-Many2OneSelect [Arguments] ${model} ${field} ${value} Modal Click Link xpath=//ul[contains(@class,'ui-autocomplete') and not(contains(@style,'display: none'))]/li[1]/a ElementPostCheck - # The blue arrow on the right side of a many2one Many2One-External [Arguments] ${model} ${field} Modal Click Button xpath=//div[contains(@class,'o_form_field_many2one') and .//input[@data-bt-testing-model_name='${model}' and @data-bt-testing-name='${field}']]//button[contains(@class,'o_external_button')] Date [Arguments] ${model} ${field} ${value} SelectNotebook xpath=//input[@data-bt-testing-model_name='${model}' and @data-bt-testing-name='${field}'] - Click Element //input[@data-bt-testing-model_name='${model}' and @data-bt-testing-name='${field}' and @class="o_datepicker_input o_form_input"] - sleep 1s Modal Input Text xpath=//input[@data-bt-testing-model_name='${model}' and @data-bt-testing-name='${field}'] value=${value} ElementPostCheck @@ -206,7 +194,7 @@ Char [Arguments] ${model} ${field} ${value} Modal Clear Element Text xpath=//input[@data-bt-testing-model_name='${model}' and @data-bt-testing-name='${field}'] Modal Input Text xpath=//input[@data-bt-testing-model_name='${model}' and @data-bt-testing-name='${field}'] value=${value} ElementPostCheck - + # ok: 9.0EE CharWizard [Arguments] ${model} ${field} ${value} SelectNotebook xpath=//input[@data-bt-testing-model_name='${model}' and @data-bt-testing-name='${field}'] @@ -222,12 +210,12 @@ X2Many-Char [Arguments] ${model} ${field} ${value} Float [Arguments] ${model} ${field} ${value} SelectNotebook xpath=//input[@data-bt-testing-model_name='${model}' and @data-bt-testing-name='${field}'] - Modal Input Text xpath=//input[@data-bt-testing-model_name='${model}' and @data-bt-testing-name='${field}'] value=${value} + Modal Input Text xpath=//input[@data-bt-testing-model_name='${model}' and @data-bt-testing-name='${field}'] ${value} ElementPostCheck X2Many-Float [Arguments] ${model} ${field} ${value} - Modal Clear Element Text xpath=//input[ancestor::div[contains(@class, 'o_view_manager_content') and contains(@class, 'o_form_field') and descendant::div[@data-bt-testing-submodel_name='${model}']] and @data-bt-testing-name='${field}'] - Modal Input Text xpath=//input[ancestor::div[contains(@class, 'o_view_manager_content') and contains(@class, 'o_form_field') and descendant::div[@data-bt-testing-submodel_name='${model}']] and @data-bt-testing-name='${field}'] value=${value} + Modal Clear Element Text xpath=//input[ancestor::div[contains(@class, 'o_view_manager_content') and contains(@class, 'o_form_field') and descendant::div[@data-bt-testing-model_name='${model}']] and @data-bt-testing-name='${field}'] + Modal Input Text xpath=//input[ancestor::div[contains(@class, 'o_view_manager_content') and contains(@class, 'o_form_field') and descendant::div[@data-bt-testing-model_name='${model}']] and @data-bt-testing-name='${field}'] ${value} ElementPostCheck FloatWizard [Arguments] ${model} ${field} ${value} @@ -239,30 +227,24 @@ Text [Arguments] ${model} ${field} ${value} SelectNotebook xpath=//textarea[@data-bt-testing-model_name='${model}' and @data-bt-testing-name='${field}'] Modal Input Text xpath=//textarea[@data-bt-testing-model_name='${model}' and @data-bt-testing-name='${field}'] ${value} ElementPostCheck - + TextWizard [Arguments] ${model} ${field} ${value} SelectNotebook xpath=//textarea[@data-bt-testing-model_name='${model}' and @data-bt-testing-name='${field}'] Input Text xpath=//textarea[@data-bt-testing-model_name='${model}' and @data-bt-testing-name='${field}'] ${value} ElementPostCheck X2Many-Text [Arguments] ${model} ${field} ${value} - Modal Click Element xpath=//textarea[ancestor::div[contains(@class, 'o_view_manager_content') and contains(@class, 'o_form_field') and descendant::div[@data-bt-testing-model_name='${model}']] and @data-bt-testing-name='${field}'] - Modal Clear Element Text xpath=//textarea[ancestor::div[contains(@class, 'o_view_manager_content') and contains(@class, 'o_form_field') and descendant::div[@data-bt-testing-model_name='${model}']] and @data-bt-testing-name='${field}'] + Modal Clear Element Text xpath=//textarea[ancestor::div[contains(@class, 'o_view_manager_content') and contains(@class, 'o_form_field') and descendant::div[@data-bt-testing-model_name='${model}']] and @data-bt-testing-name='${field}'] Modal Input Text xpath=//textarea[ancestor::div[contains(@class, 'o_view_manager_content') and contains(@class, 'o_form_field') and descendant::div[@data-bt-testing-model_name='${model}']] and @data-bt-testing-name='${field}'] value=${value} ElementPostCheck -Select-Option [Arguments] ${model} ${field} ${value} +Select-Option [Arguments] ${model} ${field} ${value} SelectNotebook xpath=//select[@data-bt-testing-model_name='${model}' and @data-bt-testing-name='${field}'] Modal Select From List By Value xpath=//select[@data-bt-testing-model_name='${model}' and @data-bt-testing-name='${field}'] value=${value} #SelectNotebook xpath=//select[@id='${model}' and @name='${field}'] #Select From List By Value xpath=//select[@id='${model}' and @name='${field}'] ${value} ElementPostCheck -X2Many-Selection [Arguments] ${model} ${field} ${value} - Modal Click Element xpath=//select[ancestor::div[contains(@class, 'o_view_manager_content') and contains(@class, 'o_form_field') and descendant::div[@data-bt-testing-submodel_name='${model}']] and @data-bt-testing-name='${field}'] - Modal Select From List By Value xpath=//select[ancestor::div[contains(@class, 'o_view_manager_content') and contains(@class, 'o_form_field') and descendant::div[@data-bt-testing-submodel_name='${model}']] and @data-bt-testing-name='${field}'] value=${value} - ElementPostCheck - Checkbox-Select [Arguments] ${model} ${field} SelectNotebook xpath=//input[@type='checkbox' and @data-bt-testing-name='${field}'] Click Element xpath=//input[@type='checkbox' and @data-bt-testing-name='${field}'] @@ -278,7 +260,7 @@ NotebookPage [Arguments] ${string} # checked: 8.0 ok NewOne2Many [Arguments] ${model} ${field} SelectNotebook xpath=//div[contains(@class,'o_form_field') and contains(@class, 'o_view_manager_content') and descendant::div[@data-bt-testing-model_name='${model}' and @data-bt-testing-name='${field}']]//td[contains(@class,'o_form_field_x2many_list_row_add')]/a - Click element xpath=//div[contains(@class,'o_form_field') and contains(@class, 'o_view_manager_content') and descendant::div[@data-bt-testing-model_name='${model}' and @data-bt-testing-name='${field}']]//td[contains(@class,'o_form_field_x2many_list_row_add')]/a + Click Link xpath=//div[contains(@class,'o_form_field') and contains(@class, 'o_view_manager_content') and descendant::div[@data-bt-testing-model_name='${model}' and @data-bt-testing-name='${field}']]//td[contains(@class,'o_form_field_x2many_list_row_add')]/a ElementPostCheck One2ManySelectRecord [Arguments] ${model} ${field} ${submodel} @{fields} @@ -374,11 +356,10 @@ MainWindowSearchTextField [Arguments] ${field} ${value} ElementPostCheck MainWindowSearchNow - + MainWindowMany2One [Arguments] ${field} ${value} Click Element xpath=//td[contains(@class, 'view-manager-main-content')]//input[@name='${field}'] don't wait Input Text xpath=//td[contains(@class, 'view-manager-main-content')]//input[@name='${field}'] ${value} Click Element xpath=//td[contains(@class, 'view-manager-main-content')]//input[@name='${field}']/following-sibling::span[contains(@class, 'oe-m2o-drop-down-button')]/img don't wait Click Link xpath=//ul[contains(@class, 'ui-autocomplete') and not(contains(@style, 'display: none'))]//a[self::*/text()='${value}'] don't wait ElementPostCheck -