やること
自動化による継続的なブラウザテストを行うSeleniumですが、調整さんを使って試してみる。ブラウザテストという本来の目的とは違うけど、動きをみたいので、まぁいいか。
環境
OS : Mac
ブラウザ : Safari
言語 : Python
やってみる
インストール
sudo pip install selenium
この他に、Safariの[開発]>[リモートオートメーションの許可]を行う。
とりあえず調整さんを開いてみる
from selenium import webdriver
# Safari用のWebDriver
browser = webdriver.Safari()
# 調整さんを表示
browser.get('https://chouseisan.com/')
実行すると、URL部分の色がオレンジ色のブラウザが立ち上がる。
この画面の「イベント名」「候補日程」を入力したのち、「出欠表をつくる」ボタンを押すようにする。
「イベント名」を入力
「イベント名」のidは「name」であるので、以下のように記述。
event_name = browser.find_element_by_id('name')
event_name.send_keys('Seleniumから入力')
ただ、これを実行すると以下のようなエラーが発生した。
File "selenium_python.py", line 6
SyntaxError: Non-ASCII character '\xe3' in file selenium_python.py on line 6, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
原因はエンコードの問題のため、文頭にエンコードの設定を書いてあげる。
Pythonにおける文字列はasciiコードでエンコードされるため、日本語のようなマルチバイト文字があるとエラーとなってしまいます。
http://uxmilk.jp/8851
# coding: UTF-8
と、やってみたものの、なんだかうまくいかない、ということで日本語の入力を一旦やめてとりあえず前に進もう。以下に変更して前に進みます。
event_name = browser.find_element_by_id('name')
event_name.send_keys('Selenium')

[イベント名]に入力されました。
次に、カレンダーを選択することをSeleniumに行わせるが、カレンダーの要素は以下のようになっている。
<td class=" ui-datepicker-week-end " data-handler="selectDay"
data-event="click" data-month="11" data-year="2017">
<a class="ui-state-default" href="#">31</a>
</td>
きっとtdタグををクッリクすれば文字が入力されると思うので、
".ui-datepicker-week-end"を持ち、
"data-month='11'とdata-year='2017'"を持つものをクリックすれば、
日付が入るものと思われるためコードを書いてみる。
find_elements_by_css_selectorを利用するとリストで値がかえってくるのでindexを指定してクリックしてあげると、候補日程に時間日にちが入った。
event_date = browser.find_elements_by_css_selector(".ui-datepicker-week-end[data-month='11'][data-year='2017']")
event_date[1].click()

入力が済んだので、アンケートの登録を行う。
自動テストの際にエビデンスの取得などの際は、ここでスクリーンショットをとったりするのかな。
とりあえず、とらずにsubmitする。
submit()でもよいが、submit()だとonClickイベントがおきないため、click()を使用している。
event_submit = browser.find_element_by_id('createBtn')
event_submit.click()

その他
以下のエラーが発生した時は、一度Safariをプロセスごと落として、再度リモートオートメーションを許可すればなおった。
selenium.common.exceptions.SessionNotCreatedException: Message: Could not create a session: You must enable the 'Allow Remote Automation' option in Safari's Develop menu to control Safari via WebDriver.
参考にさせていただきました
http://www.seleniumqref.com/api/python/element_set/Python_send_keys.html
http://uxmilk.jp/8851
python:selenium_python.py