Ce script Python permet d’automatiser la création d’un incident sur une instance ServiceNow à l’aide de Selenium. Voici les étapes principales du script :
- Vérification des paramètres : Le script s’assure que trois paramètres (nom de l’instance, nom d’utilisateur et mot de passe) sont fournis lors de son exécution. Si ce n’est pas le cas, il affiche un avertissement et s’arrête.
- Configuration de Selenium :
- Importation des modules nécessaires de Selenium.
- Configuration des options de Chrome pour exécuter le navigateur en mode sans tête (headless) pour ne pas afficher l’interface graphique.
- Connexion à l’instance ServiceNow :
- Ouverture de la page de connexion de l’instance ServiceNow.
- Remplissage des champs de nom d’utilisateur et de mot de passe puis tentative de connexion.
- Vérification de la connexion :
- Après la tentative de connexion, le script vérifie si l’URL courante contient un segment attendu indiquant que la connexion a réussi.
- Si la connexion échoue, le script s’arrête.
- Création d’un incident :
- Accès à la page de création d’incident.
- Remplissage des champs nécessaires pour créer un incident (urgence, description).
- Soumission du formulaire de création d’incident.
- Récupération du numéro d’incident :
- Après la soumission, le script récupère et affiche le numéro de l’incident créé.
Ce script est utile pour automatiser le processus de création d’incidents dans ServiceNow, permettant de gagner du temps et d’éviter les erreurs manuelles
import sys
if len(sys.argv) < 4:
warning = """
Please provide 3 parameters in the format "instancename username password"
e.g. dev1234 itiluser itiluserpassword
"""
print(warning)
sys.exit()
sninstance = "https://" + sys.argv[1] + ".service-now.com"
sninstanceuser = sys.argv[2]
sninstancepwd = sys.argv[3]
#selenium setup
print('start of login')
import selenium
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.select import Select
from selenium.webdriver.support.ui import Select
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
#chrome setup
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--headless')
browser = webdriver.Chrome(options=chrome_options)
browser.get(str(sninstance) + "/login.do")
#login to ServiceNow Instnace
WebDriverWait(browser, 10).until(EC.presence_of_element_located((By.ID, "user_name")))
username = browser.find_element(By.ID, "user_name")
password = browser.find_element(By.ID, "user_password")
username.send_keys(str(sninstanceuser))
password.send_keys(str(sninstancepwd))
login_attempt = browser.find_element(By.ID, "sysverb_login")
login_attempt.click()
print('end of login')
#confirm login and move to new incident page
browser.get(str(sninstance) + "/sp?id=sc_cat_item&sys_id=3f1dd0320a0a0b99000a53f7604a2ef9")
print('current url after login is ' + browser.current_url)
expected = 'sp'
print('expected url after login is ' + expected)
if expected in browser.current_url:
print ('login success!')
else:
print ('could not access incident portal page, check login details')
exit(1)
print('end of login')
#create incident
print('logged in, now creating incident')
browser.get(str(sninstance) + "/sp?id=sc_cat_item&sys_id=3f1dd0320a0a0b99000a53f7604a2ef9")
#### DEBUG BLOCK to print all elements################################
'''
browser.switch_to.default_content()
print('XPATH ELEMENTS')
elepath = browser.find_elements(By.ID, "*")
for i in elepath:
if hasattr(i, 'id'):
print('Tag:', i.tag_name, ' ID:', i.get_attribute('id'))
'''
############################################################
#find elements and set values
browser.switch_to.default_content()
WebDriverWait(browser, 10).until(EC.presence_of_element_located((By.ID, "s2id_autogen1")))
print('setting urgency')
urgency = browser.find_element(By.ID,'s2id_autogen1')
urgency.send_keys('3',Keys.RETURN)
print('setting description')
description = browser.find_element(By.ID,"sp_formfield_comments")
description.send_keys("Testing Incident Submission with Selenium from Portal")
#submit
try:
browser.find_element(By.XPATH,'//button[text()="Submit"]').click() #submit
print('completed incident creation')
except:
print("Incident Submission failed")
#get Incident number from form
browser.switch_to.default_content()
WebDriverWait(browser, 10).until(EC.presence_of_element_located((By.ID, "data.number.name")))
number = browser.find_element(By.ID,"data.number.name")
numValue = number.text
print('Number is', numValue)