はじめまして。
どうしてもわからないことがあったので、質問させていただきます
###前提・実現したいこと
selenium webdriverを使って以下のようなHTMLの動作テストを進めています。
トップページのソースが以下となります。
main.html
1 2<html> 3<head> 4 <title>トップページ</title> 5</head> 6 7 <frameset framespacing=0 frameborder=0 rows="100px, *"> 8 <frame src="Hoge.jsp" name="header" id="header" scrolling="no" noresize marginheight="0"> 9 <!--- ↓取得したいフレーム①↓ ---> 10 <frame src="FugaServlet?logid=header" name="main" id="main" scrolling="auto" marginheight="0" marginwidth="4"> 11 </frameset> 12 13</html> 14
このトップページのmain
フレームを展開したものが以下です。
html
1 2<HTML> 3<HEAD></HEAD> 4<FRAMESET cols="260px,*" frameborder="no" border="0" framespacing="0" onLoad="Init();activeDesktopImage();"> 5 6 <!--- ↓取得したいフレーム②↓ ---> 7 <FRAME name="leftFrame" noresize src="left.jsp"> 8 9 <FRAME name="rightFrame" src="right.jsp"> 10 11</FRAMESET> 12</HTML> 13
更にこの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が返却されます)
ruby
1#coding: utf-8 2 3require 'rubygems' 4require 'selenium-webdriver' 5 6driver = Selenium::WebDriver.for :firefox 7 8driver.navigate.to 'https://hogehoge.com' 9 10driver.switch_to.frame('main') #ここでみることはできる 11 12driver.switch_to.frame('leftFrame') #できない 13
実行結果
Unable to locate element: #leftFrame (Selenium::WebDriver::Error::NoSuchElementError)
以下のようにXpathを使ってfind_element
をしてみても取得はできませんでした
ruby
1driver.switch_to.frame('main') 2 3driver.find_element(:xpath, '/html/frameset/frame[1]') 4
ネットで調べてみても、frameの取得に悩んでいる方はたくさんいらっしゃいましたが、有力な情報に辿り着くことはできませんでした・・・
上記のような要素の取得方法についてご存じの方がいらっしゃいましたら、
ぜひともご教授いただけませんでしょうか。
よろしくお願い致します。
あなたの回答
tips
プレビュー