LoginSignup
5
5

More than 3 years have passed since last update.

Seleniumでid属性の指定されていない要素を取得する

Posted at

やりたいこと

Selenium WebDriverを使って画面の要素を指定する際に、id属性が指定されていない場合はどうやってその要素を取得するか?という話です。ChromeでYahooの検索キーワードに任意のワードを指定し検索ボタンを押下する、というのを例に見てみます。
コメント 2020-03-21 133909.png

まず、検索キーワードを入力するテキストボックスにはname属性(name="p")が指定されているので、以下のようにそれを利用します。
コメント 2020-03-21 214940.png

検索キーワードがゆりあんレトリバーなのは、YouTubeでゆりあんレトリバーの動画を見ながら本記事を書いているので何となくそうしてます。

SampleScript.java
webDriver.findElement(By.name("p")).sendKeys("ゆりあんレトリバー");

検索ボタンにはid属性もname属性も指定されていません。
コメント 2020-03-21 133942.png

このような場合は、XPathが利用できます。XPathはChromeのデベロッパーツールから確認、コピーできます。
コメント 2020-03-21 134008.png
コードは以下の通りです。

SampleScript.java
webDriver.findElement(By.xpath("//*[@id=\"ContentWrapper\"]/header/section[1]/div/form/fieldset/span/button/span/span")).click();

まとめ

ソースはこんな感じです。

SampleScript.java
public class SampleScript {

    public static void main(String[] args) {
        System.setProperty("webdriver.chrome.driver", "C:\\Development\\selenium\\chromedriver.exe");
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("https://www.yahoo.co.jp/");
        webDriver.findElement(By.name("p")).sendKeys("ゆりあんレトリバー");
        webDriver.findElement(By.xpath("//*[@id=\"ContentWrapper\"]/header/section[1]/div/form/fieldset/span/button/span/span")).click();
    }
}

実際に動かしてみると以下のようになります。
sample.gif

ちなみに、上記ではあえて最後にブラウザを閉じていませんが、webDriver.quit();とすること、ブラウザを閉じることができます。
quitメソッドを呼び出すことで、WebDriverインスタンスから生成された全てのブラウザが閉じ、そのブラウザのDriverプロセスも終了します。逆に言うと、quitメソッドを呼び出さないとそれらのプロセスも残ったままとなってしまうので注意が必要です。

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5