Selenium WebDriverでServiceNowへ自動ログイン


◆概要

  • WebのUIテスト自動化に使われるSelenium WebDriverを使い、ServiceNowのログイン操作を自動で行ってみた。

◆動作環境

  • OS: Windows10
  • Pythonバージョン: 3.8.0

◆準備

ServiceNowのインスタンス作成

  • ServiceNow Developersのページからアカウントを登録することで開発者用のインスタンスを作成することができる。
  • 作成が完了するとインスタンスURLやadminアカウントの初期情報が表示されるので必ずメモをしておく。

Pythonの実行環境準備

  • Pythonの公式サイトからインストーラをダウンロードしてインストールする。
    • 必ずpipが含まれているか確認する。

Seleniumの準備

  • pipでSeleniumをインストールする。
    • > pip install selenium
  • Seleniumの公式サイトから動かしたいブラウザのドライバをダウンロードする。
    • 今回はGoogle Chrome上で動かすため、「Google Chrome Driver」をダウンロードする。
    • ダウンロードした「chromedriver.exe」を任意の場所に設置しておく。

◆ServiceNowを操作してみる

ブラウザを起動

  • ブラウザをGoogle Chromeに指定して起動させる。
    • ついでにウィンドウを最大化
from selenium import webdriver

# Google Chromeを起動
driver = webdriver.Chrome(executable_path = 'Chrome Driverのパス')
# ウィンドウを最大化
driver.maximize_window()

ServiceNowのログインページへアクセス

  • インスタンスごとのURLを指定してアクセスする。
# ServiceNowのログインページへアクセス
driver.get('https://<ServiceNowのインスタンス名>.service-now.com/')
driver.implicitly_wait(20)

ログインフォームの要素取得

  • ログインフォーム部分はiframe内にあるため、そのままid指定すると見つからずエラーが吐き出される。
    • 先にiframeの要素を取得し、switch_to_frameでフレーム移動を行う必要がある。
    • 操作が終わったらswitch_to.default_content()でiframe内から抜ける。
# ログインフォームの含まれるiframeの要素を取得する
login_iframe = driver.find_element_by_xpath("//*[@id='gsft_main']")
# 指定したiframe内へ移動
driver.switch_to_frame(login_iframe)

# ユーザー名フォームの要素取得 & ユーザー名入力
user_name_form = driver.find_element_by_id('user_name')
user_name_form.send_keys("<ユーザー名>")

# パスワードフォームの要素取得 & パスワード入力
password_form = driver.find_element_by_id('user_password')
password_form.send_keys("<パスワード>")

# ログインボタンの要素取得 & ログインボタンクリック
login_button = driver.find_element_by_id('sysverb_login')
login_button.click()

driver.implicitly_wait(20)

# iframeから抜ける
driver.switch_to.default_content()

◆参考ページ