Ceci est une ancienne révision du document !
Selenium
pour tests d'interface web : https://www.selenium.dev/downloads/
Ressources :
Pré-recquis
- un navigateur compatible : Firefox, Chrome, Chromium, IE
- une API Webdriver (binaire) pour le navigateur :
- Chromium : https://chromedriver.chromium.org/
- Firefox : https://github.com/mozilla/geckodriver/
- la lib pyhon selenium (via pip ou virtualenv)
- Un script (python) qui appelle la lib et le binaire
Placer le binaire dans le path ou spécifier le chemin dans le script
Exemple :
import time from selenium import webdriver from selenium.webdriver.chrome.service import Service service = Service('/path/to/chromedriver') service.start() driver = webdriver.Remote(service.service_url) driver.get('http://www.google.com/'); time.sleep(5) # Let the user actually see something! driver.quit()
Autre exemple :
#!/usr/bin/env python3 from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait, Select from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By from selenium.common.exceptions import TimeoutException import os, time download_dir = os.environ['HOME'] def wait_for_id(driver, id): try: r = WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.ID, id))) except TimeoutException: print("timed out !") exit return r profile = webdriver.FirefoxProfile() profile.set_preference('browser.download.folderList', 2) profile.set_preference('browser.download.manager.showWhenStarting', False) profile.set_preference('browser.download.dir', download_dir) profile.set_preference('browser.helperApps.alwaysAsk.force', False) profile.set_preference('browser.helperApps.neverAsk.openFile', 'text/csv') profile.set_preference('browser.helperApps.neverAsk.saveToDisk', 'text/csv') driver = webdriver.Firefox(profile) driver.get("https://mon-url.com") driver.find_element_by_id("ctl00_mainContent_Login1_UserName").send_keys("monlogin") driver.find_element_by_id("ctl00_mainContent_Login1_Password").send_keys("monmotdepasse") driver.find_element_by_id("ctl00_mainContent_Login1_LoginButton").click() home_page = wait_for_id(driver, "ctl00_ctl00_menubarPlaceHolder_ASPxMenu1") stats_link = home_page.find_element_by_css_selector("#ctl00_ctl00_menubarPlaceHolder_ASPxMenu1_DXI5_T a").click() candidates_link = wait_for_id(driver, "ctl00_ctl00_mainContent_mainContent_WucCatalogueReporting1_TvMenut2") driver.find_element_by_id("ctl00_ctl00_mainContent_mainContent_WucCatalogueReporting1_TvMenut2").click() format_link = wait_for_id(driver, "ctl00_ctl00_mainContent_mainContent_WucCatalogueReporting1_RvMain_ctl01_ctl05_ctl00").click() format_selector = Select(driver.find_element_by_id("ctl00_ctl00_mainContent_mainContent_WucCatalogueReporting1_RvMain_ctl01_ctl05_ctl00")) format_selector.select_by_value("CSV") driver.find_element_by_id("ctl00_ctl00_mainContent_mainContent_WucCatalogueReporting1_RvMain_ctl01_ctl05_ctl01").click() before = dict([(f, None) for f in os.listdir(download_dir)]) while 1: time.sleep(10) after = dict([(f, None) for f in os.listdir(download_dir)]) added = [f for f in after if not f in before] if "OfCandidat.csv" in added: break before = after driver.quit()