Selenium webdriverよく使う操作メソッドまとめ

# はじめに
こんにちは。QAの@mochioです。
本記事は[LIFULL Advent Calendar 2017](https://qiita.com/advent-calendar/2017/lifull) 20日目の記事になります。

業務で自動テストを実施しておりまして、そこでSeleniumを使っております。
Seleniumに関してはいろんな記事に書かれておりますのでそちらをご参照ください。
言語間で書き方が少し違うのもあったりしてごっちゃになるのでその整理のために作りました。

## 特定のURLでブラウザを起動する
```java:Java
driver.get("URL");
```
```c#:C#
driver.Url = "URL";
```
```python:Python
driver.get("URL")
```
```ruby:Ruby
driver.get("URL") 
```
## ページ遷移したいとき
```java:Java
driver.navigate().to("URL");
```
```c#:C#
driver.Navigate().GoToUrl("URL");
```
```python:Python
driver.get("URL")
```
```ruby:Ruby
driver.navigate.to("URL") 
```
## 一つ前に戻りたいとき
```java:Java
driver.navigate().back();
```
```c#:C#
driver.Navigate().Back();
```
```python:Python
driver.back()
```
```ruby:Ruby
driver.navigate.back 
```
## 一つ前に進みたいとき
```java:Java
driver.navigate().forward();
```
```c#:C#
driver.Navigate().Forward();
```
```python:Python
driver.forward()
```
```ruby:Ruby
driver.navigate.forward 
```
## ブラウザを更新する
```java:Java
driver.navigate().refresh();
```
```c#:C#
driver.Navigate().Refresh();
```
```python:Python
driver.refresh()
```
```ruby:Ruby
driver.navigate.refresh
```
## 現在のURLを知りたいとき
```java:Java
driver.getCurrentUrl()
```
```c#:C#
driver.Url;
```
```python:Python
driver.current_url
```
```ruby:Ruby
driver.current_url
```
## タイトルを知りたいとき
```java:Java
driver.getTitle():
```
```c#:C#
driver.Title;
```
```python:Python
driver.title
```
```ruby:Ruby
driver.title
```
## ページのソースを取得したいとき
```java:Java
driver.getPageSource();
```
```c#:C#
driver.PageSource;
```
```python:Python
driver.page_source
```
```ruby:Ruby
driver.page_source
```
## ウインドウを閉じたいとき
```java:Java
driver.close();
```
```c#:C#
driver.Close();
```
```python:Python
driver.close()
```
```ruby:Ruby
driver.close
```
## すべてのウインドウを閉じたいとき
```java:Java
driver.quit();
```
```c#:C#
driver.Quit();
```
```python:Python
driver.quit()
```
```ruby:Ruby
driver.quit
```
## ある要素を取得したいとき
```java:Java
driver.findElement(By.className("classname")); //classでの指定
driver.findElement(By.id("id")); //idでの指定
driver.findElement(By.xpath("xpath")); //xpathでの指定
```
```c#:C#
driver.FindElement(By.ClassName("classname")); //classでの指定
driver.FindElement(By.Id("id")); //idでの指定
driver.FindElement(By.Xpath("xpath")); //xpathでの指定
```
```python:Python
driver.find_element_by_class_name("classname") # classでの指定
driver.find_element_by_id("id") # idでの指定
driver.find_element_by_xpath("xpath") # xpathでの指定
```
```ruby:Ruby
driver.find_element(:class, "classname") # classでの指定
driver.find_element(:id, "id") # idでの指定
driver.find_element(:xpath, "xpath") # xpathでの指定
```
## ある要素をクリックしたいとき
```java:Java
driver.findElement(By.XPath("XPATH")).click();
```
```c#:C#
driver.FindElement(By.XPath("XPATH")).Click();
```
```python:Python
driver.find_element_by_xpath("XPATH").click()
```
```ruby:Ruby
driver.find_element(:xpath, "XPATH").click
```
## ある要素までスクロールしたいとき
```java:Java
WebElement element = driver.findElement(By.id("ID"));
Actions actions = new Actions(driver);
actions.moveToElement(element);
actions.perform();
```
```c#:C#
var element = driver.FindElement(By.id("ID"));
Actions actions = new Actions(driver);
actions.MoveToElement(element);
actions.Perform();
```
```python:Python
from selenium.webdriver.common.action_chains import ActionChains

element = driver.find_element_by_id("ID")
actions = ActionChains(driver)
actions.move_to_element(element)
actions.perform()
```
```ruby:Ruby
driver.find_element(:id, "ID").location_once_scrolled_into_view
```
## ドロップダウンを選択したいとき

※Select Supportをimportする必要あり。

```java:Java
element = driver.findElement(By.xpath("xpath"));
Select(element).selectByIndex(indexnum); // indexで選択
Select(element).selectByValue("value"); // valueの値
Select(element).selectByVisibleText("text"); // 表示テキスト
```
```c#:C#
element = driver.FindElement(By.Xpath("xpath"));
Select(element).SelectByIndex(indexnum); // indexで選択
Select(element).SelectByValue("value"); // valueの値
Select(element).SelectByText("text"); // 表示テキスト
```
```python:Python
element = driver.find_element_by_xpath("xpath")
Select(element).select_by_index(indexnum) # indexで選択
Select(element).select_by_value("value") # valueの値
Select(element).select_by_visible_text("text") # 表示テキスト
```
```ruby:Ruby
element = driver.find_element(:xpath, "xpath")
Select(element).select_by(:index, indexnum) # indexで選択
Select(element).select_by(:value, "value") # valueの値
Select(element).select_by(:text, "string") # 表示テキスト
```
## テキストを入力したいとき
```java:Java
driver.findElement(By.id("ID")).sendKeys("string");
```
```c#:C#
driver.FindElement(By.id("ID")).SendKeys("string");
```
```python:Python
driver.find_element_by_id("ID").send_keys("strings")
```
```ruby:Ruby
driver.find_element(:id, "ID").send_keys("strings")
```
## テキストを取得したいとき
```java:Java
driver.findElement(By.id("ID")).getText();
```
```c#:C#
driver.FindElement(By.id("ID")).Text;
```
```python:Python
driver.find_element_by_id("ID").text
```
```ruby:Ruby
driver.find_element(:id, "ID").text
```
## 属性を取得したいとき
```java:Java
driver.findElement(By.id("ID")).getAttribute("value");
```
```c#:C#
driver.FindElement(By.id("ID")).GetAttribute("value");
```
```python:Python
driver.find_element_by_id("ID").get_attribute("value")
```
```ruby:Ruby
driver.find_element(:id, "ID").attribute("value")
```
## アラートをハンドリングしたいとき
```java:Java
driver.switchTo().alert().accept();
```
```c#:C#
driver.SwitchTo().Alert().Accept();
```
```python:Python
Alert(driver).accept()
```
```ruby:Ruby
driver.switch_to.alert.accept
```
## ウインドウサイズを最大にしたいとき
```java:Java
driver.manage().window().maximize();
```
```c#:C#
driver.Manage().Window().Maximize();
```
```python:Python
driver.maximize_window()
```
```ruby:Ruby
driver.manage.window.maximize
```
## 要素が表示されているかどうかを判定したいとき
```java:Java
driver.findElement(By.xpath("xpath")).isDisplayed();
```
```c#:C#
driver.FindElement(By.Xpath("xpath")).Displayed(); 
```
```python:Python
driver.find_element_by_xpath("xpath").is_displayed()
```
```ruby:Ruby
driver.find_element(:xpath, "xpath").displayed?
```
## 要素が有効かどうかを判定したいとき
```java:Java
driver.findElement(By.xpath("xpath")).isEnabled();
```
```c#:C#
driver.FindElement(By.Xpath("xpath")).Enabled; 
```
```python:Python
driver.find_element_by_xpath("xpath").is_enabled()
```
```ruby:Ruby
driver.find_element(:xpath, "xpath").enabled?
```
## 要素が選択されているかどうかを判定したいとき
```java:Java
driver.findElement(By.xpath("xpath")).isSelected();
```
```c#:C#
driver.FindElement(By.Xpath("xpath")).Selected(); 
```
```python:Python
driver.find_element_by_xpath("xpath").is_selected()
```
```ruby:Ruby
driver.find_element(:xpath, "xpath").selected?
```
# おわりに
作っては見ましたが、同じようなものばかりでした。
間違ったものがあればご指摘頂ければ幸いです。
要望があれば随時追加していきます。
他にもみなさんが使う便利なメソッドがあれば教えてください:bow: