質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.54%

  • Ruby on Rails

    8656questions

    Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

  • selenium

    677questions

    Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

  • Firefox

    236questions

    Mozilla Foundationによって作られた無料、オープンソース、クロスプラットフォームなウェブブラウザ

frame内部のframeの要素をselenium webdriverで取得したい

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,434

はじめまして。
どうしてもわからないことがあったので、質問させていただきます

前提・実現したいこと

selenium webdriverを使って以下のようなHTMLの動作テストを進めています。
トップページのソースが以下となります。

<html>
<head>
  <title>トップページ</title>
</head>

  <frameset framespacing=0 frameborder=0 rows="100px, *">
    <frame src="Hoge.jsp" name="header" id="header" scrolling="no" noresize marginheight="0">
   <!--- ↓取得したいフレーム①↓ --->
    <frame src="FugaServlet?logid=header" name="main" id="main" scrolling="auto" marginheight="0" marginwidth="4">
  </frameset>

</html>

このトップページのmainフレームを展開したものが以下です。

<HTML>
<HEAD></HEAD>
<FRAMESET cols="260px,*" frameborder="no" border="0" framespacing="0" onLoad="Init();activeDesktopImage();">

  <!--- ↓取得したいフレーム②↓ --->
  <FRAME name="leftFrame" noresize src="left.jsp">

  <FRAME name="rightFrame" src="right.jsp">

</FRAMESET>
</HTML>

更にこのmainフレーム中にあるleftFrameフレームを展開し、

<HTML>
<HEAD></HEAD>
<BODY>
 <TABLE cellspacing=0 cellpadding=0>
   <TBODY>
      <TR>
        <!--- ↓今回取得したい要素↓ --->
        <TD class="tabSpace">fuga</TD>
        <TD class="tabSpace">hoge</TD>
       </TR>
   </TBODY>
  </TABLE>
</BODY>
</HTML>


leftFrameフレーム内部にある、fugaを取得するのが目的です。

発生している問題・エラーメッセージ

今回、以下のサイトなどを参考にしながら、selenium webdriverを使ってrubyでコードを書いているのですが、
RubyでSeleniumを使ってスクレイピング
webdriverからだと、フレームの移動は1度しかできないようで、frameの中のframe、すなわちleftFrameフレームに遷移することができません。(noSuchElementErrorが返却されます)

#coding: utf-8

require 'rubygems'
require 'selenium-webdriver'

driver = Selenium::WebDriver.for :firefox

driver.navigate.to 'https://hogehoge.com'

driver.switch_to.frame('main') #ここでみることはできる

driver.switch_to.frame('leftFrame') #できない

実行結果

Unable to locate element: #leftFrame (Selenium::WebDriver::Error::NoSuchElementError)

以下のようにXpathを使ってfind_elementをしてみても取得はできませんでした

driver.switch_to.frame('main')

driver.find_element(:xpath, '/html/frameset/frame[1]') 

ネットで調べてみても、frameの取得に悩んでいる方はたくさんいらっしゃいましたが、有力な情報に辿り着くことはできませんでした・・・

上記のような要素の取得方法についてご存じの方がいらっしゃいましたら、
ぜひともご教授いただけませんでしょうか。
よろしくお願い致します。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

まだ回答がついていません

同じタグがついた質問を見る

  • Ruby on Rails

    8656questions

    Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

  • selenium

    677questions

    Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

  • Firefox

    236questions

    Mozilla Foundationによって作られた無料、オープンソース、クロスプラットフォームなウェブブラウザ