Reflect the current year in all TechnoLibre license headers across script/, test/, and docker/. Generated by Claude Code 2.1.74 model claude-sonnet-4-6 Co-Authored-By: Mathieu Benoit <mathben@technolibre.ca>
199 lines
7 KiB
Python
Executable file
199 lines
7 KiB
Python
Executable file
#!/usr/bin/env python3
|
|
# © 2021-2026 TechnoLibre (http://www.technolibre.ca)
|
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
|
|
|
|
import argparse
|
|
import os
|
|
import sys
|
|
import time
|
|
|
|
from selenium.webdriver.common.by import By
|
|
|
|
new_path = os.path.normpath(
|
|
os.path.join(os.path.dirname(__file__), "..", "..", "..")
|
|
)
|
|
sys.path.append(new_path)
|
|
|
|
|
|
from script.selenium import selenium_lib, web_login
|
|
|
|
|
|
def run(config, selenium_tool):
|
|
selenium_tool.inject_cursor()
|
|
if config.open_me_devops:
|
|
selenium_tool.odoo_website_menu_click("Erplibre DevOps")
|
|
if config.generate_code:
|
|
selenium_tool.click_with_mouse_move(
|
|
by=By.CSS_SELECTOR, value="button.oe_stat_button:nth-child(1)"
|
|
)
|
|
selenium_tool.click_with_mouse_move(
|
|
by=By.NAME, value="state_goto_code_module"
|
|
)
|
|
selenium_tool.input_text_with_mouse_move(
|
|
by=By.ID,
|
|
value="working_module_name_1",
|
|
text_value="test_coucou",
|
|
)
|
|
selenium_tool.click_with_mouse_move(
|
|
by=By.NAME, value="action_code_module_autocomplete_module_path"
|
|
)
|
|
time.sleep(1)
|
|
selenium_tool.click_with_mouse_move(
|
|
by=By.XPATH, value="//a[contains(text(), 'Ajouter une ligne')]"
|
|
)
|
|
selenium_tool.click_with_mouse_move(
|
|
by=By.CLASS_NAME, value="o_create_button"
|
|
)
|
|
selenium_tool.input_text_with_mouse_move(
|
|
by=By.XPATH,
|
|
value="//div[@name='name']/input",
|
|
text_value="x_coucou",
|
|
)
|
|
selenium_tool.click_with_mouse_move(
|
|
by=By.XPATH,
|
|
value="//h4[contains(text(), 'Créer Model')]/../../main//a[contains(text(), 'Ajouter une ligne')]",
|
|
)
|
|
selenium_tool.input_text_with_mouse_move(
|
|
by=By.XPATH,
|
|
value="//h4[contains(text(), 'Créer Field')]/../../main//div[@name='name']/input",
|
|
text_value="x_name",
|
|
)
|
|
selenium_tool.click_with_mouse_move(
|
|
by=By.XPATH,
|
|
value="//h4[contains(text(), 'Créer Field')]/../../footer/button[contains(@class, 'o_form_button_save')]",
|
|
)
|
|
selenium_tool.click_with_mouse_move(
|
|
by=By.XPATH,
|
|
value="//h4[contains(text(), 'Créer Model')]/../../footer/button[contains(@class, 'o_form_button_save')]",
|
|
)
|
|
time.sleep(1)
|
|
selenium_tool.click_with_mouse_move(
|
|
by=By.XPATH,
|
|
value="//footer/div[@name='states_buttons']/button[@name='action_code_module_generate']",
|
|
)
|
|
|
|
# selenium_tool.click(
|
|
# "/html/body/header/nav/div/div[1]/div[2]/div/div/div/ul/li[2]/a",
|
|
# )
|
|
# selenium_tool.click(
|
|
# "/html/body/div[1]/main/div[2]/div/div/table/tbody/tr[1]/td[2]",
|
|
# )
|
|
# if config.open_me_devops_auto:
|
|
# selenium_tool.click(
|
|
# "/html/body/header/nav/div/div[1]/div[2]/div/div/div/ul/li[2]/a",
|
|
# )
|
|
# selenium_tool.click(
|
|
# "/html/body/div[1]/main/div[2]/div/div/table/tbody/tr[1]/td[2]",
|
|
# )
|
|
#
|
|
# # CG self
|
|
# # Bouton modifier
|
|
# # selenium_tool.click(
|
|
# # "/html/body/div[1]/main/div[1]/div[2]/div/div/div[1]/button[1]",
|
|
# # )
|
|
# # Tab Code
|
|
# # selenium_tool.click(
|
|
# # "/html/body/div[1]/main/div[2]/div/div/div[7]/ul/li[2]/a",
|
|
# # )
|
|
# # Bouton Plan
|
|
# selenium_tool.click(
|
|
# "/html/body/div[1]/main/div[2]/div/div/div[1]/div/button[1]",
|
|
# )
|
|
#
|
|
# # Bouton autopoiesis
|
|
# selenium_tool.click(
|
|
# "/html/body/div[4]/div/div/main/div/div/div[5]/table[2]/tbody/tr[2]/td[1]/button",
|
|
# )
|
|
#
|
|
# # Bouton devops regenerate
|
|
# selenium_tool.click(
|
|
# "/html/body/div[4]/div/div/main/div/div/div[6]/table[2]/tbody/tr[2]/td/button",
|
|
# )
|
|
#
|
|
# if config.open_me_devops_auto_force:
|
|
# # Disable «Stop Execution if Env Not Clean
|
|
# # selenium_tool.click(
|
|
# # "/html/body/div[1]/main/div[2]/div/div/div[7]/div/div[2]/div[6]/table[2]/tbody/tr[3]/td[2]/div/label",
|
|
# # )
|
|
# # Option Force Generate
|
|
# selenium_tool.click(
|
|
# "/html/body/div[4]/div/div/main/div/div/div[8]/table/tbody/tr[2]/td[1]/label",
|
|
# )
|
|
#
|
|
# # Gen
|
|
# # selenium_tool.click(
|
|
# # "/html/body/div[1]/main/div[2]/div/div/div[7]/div/div[2]/div[2]/table[1]/tbody/tr/td[1]/button",
|
|
# # )
|
|
#
|
|
# # Next state
|
|
# selenium_tool.click(
|
|
# "/html/body/div[4]/div/div/footer/div/footer/div/button[1]",
|
|
# )
|
|
#
|
|
# # Check error
|
|
# # selenium_tool.click(
|
|
# # "/html/body/div[1]/main/div[2]/div/div/div[7]/ul/li[13]/a",
|
|
# # )
|
|
# # selenium_tool.click("/html/body/div[1]/main/div[2]/div/div/div[6]/div/div[14]/div/div[2]/table/tbody/tr[1]", timeout=60*2)
|
|
|
|
|
|
def fill_parser(parser):
|
|
group_devops = parser.add_argument_group(title="DevOps")
|
|
group_devops.add_argument(
|
|
"--open_me_devops",
|
|
action="store_true",
|
|
help="Open application devops and show entry me.",
|
|
)
|
|
group_devops.add_argument(
|
|
"--open_me_devops_auto",
|
|
action="store_true",
|
|
help="Open application devops and show entry me and run auto setup.",
|
|
)
|
|
group_devops.add_argument(
|
|
"--open_me_devops_auto_force",
|
|
action="store_true",
|
|
help=(
|
|
"Open application devops and show entry me and run auto setup with"
|
|
" forcing argument."
|
|
),
|
|
)
|
|
group_devops.add_argument(
|
|
"--generate_code",
|
|
action="store_true",
|
|
help=("Open wizard to generate code"),
|
|
)
|
|
|
|
|
|
def compute_args(args):
|
|
if args.open_me_devops_auto_force:
|
|
args.open_me_devops_auto = True
|
|
args.open_me_devops = True
|
|
elif args.open_me_devops_auto:
|
|
args.open_me_devops = True
|
|
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser(
|
|
formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
description="""Selenium script to open web browser to ERPLibre adapted for ORE.""",
|
|
)
|
|
# Generate parser
|
|
selenium_lib.fill_parser(parser)
|
|
web_login.fill_parser(parser)
|
|
fill_parser(parser)
|
|
args = parser.parse_args()
|
|
web_login.compute_args(args)
|
|
compute_args(args)
|
|
# Instance selenium tool
|
|
selenium_tool = selenium_lib.SeleniumLib(args)
|
|
selenium_tool.configure()
|
|
selenium_tool.start_record()
|
|
# Execute
|
|
web_login.run(args, selenium_tool)
|
|
run(args, selenium_tool)
|
|
selenium_tool.stop_record()
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(main())
|