【Selenium】調整さんのイベントをつくってくれるやつ

#やること
自動化による継続的なブラウザテストを行うSeleniumですが、調整さんを使って試してみる。ブラウザテストという本来の目的とは違うけど、動きをみたいので、まぁいいか。
<img width="1280" alt="スクリーンショット 2017-12-29 12.37.03.png" src="https://qiita-image-store.s3.amazonaws.com/0/127811/0b6784a5-1fa3-279d-a922-cd11c0e153a1.png">

#環境
OS : Mac
ブラウザ : Safari
言語 : Python

#やってみる
###インストール
```
sudo pip install selenium
```
この他に、Safariの[開発]>[リモートオートメーションの許可]を行う。

###とりあえず調整さんを開いてみる
```python:selenium_python.py
from selenium import webdriver
  
# Safari用のWebDriver
browser = webdriver.Safari()
# 調整さんを表示
browser.get('https://chouseisan.com/')
```
実行すると、URL部分の色がオレンジ色のブラウザが立ち上がる。
この画面の「イベント名」「候補日程」を入力したのち、「出欠表をつくる」ボタンを押すようにする。
<img width="805" alt="スクリーンショット 2017-12-29 12.50.47.png" src="https://qiita-image-store.s3.amazonaws.com/0/127811/e4c4bc6a-d95f-6492-e28d-cfc1d22c550d.png">

###「イベント名」を入力
「イベント名」のidは「name」であるので、以下のように記述。

```python:selenium_python.py
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

```python:selenium_python.py
# coding: UTF-8
```

と、やってみたものの、なんだかうまくいかない、ということで日本語の入力を一旦やめてとりあえず前に進もう。以下に変更して前に進みます。

```python:selenium_python.py
event_name = browser.find_element_by_id('name')
event_name.send_keys('Selenium')
```

<img width="801" alt="スクリーンショット 2017-12-29 14.42.35.png" src="https://qiita-image-store.s3.amazonaws.com/0/127811/99445d02-9b8d-2b11-34c3-0a2617a33b02.png">

[イベント名]に入力されました。

次に、カレンダーを選択することをSeleniumに行わせるが、カレンダーの要素は以下のようになっている。

```html
<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を指定してクリックしてあげると、候補日程に時間日にちが入った。

```python:selenium_python.py
event_date = browser.find_elements_by_css_selector(".ui-datepicker-week-end[data-month='11'][data-year='2017']")
event_date[1].click()
```

<img width="802" alt="スクリーンショット 2017-12-29 15.17.44.png" src="https://qiita-image-store.s3.amazonaws.com/0/127811/2e64e4d9-7e7c-ec7b-5296-e058b17fb3f1.png">

入力が済んだので、アンケートの登録を行う。
自動テストの際にエビデンスの取得などの際は、ここでスクリーンショットをとったりするのかな。

とりあえず、とらずにsubmitする。
submit()でもよいが、submit()だとonClickイベントがおきないため、click()を使用している。

```python:selenium_python.py
event_submit = browser.find_element_by_id('createBtn')
event_submit.click()
```
<img width="802" alt="スクリーンショット 2017-12-29 15.39.16.png" src="https://qiita-image-store.s3.amazonaws.com/0/127811/4012ee68-c303-7975-ec4e-1f23dae18f60.png">


##その他
以下のエラーが発生した時は、一度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