環境
Ruby2.6
selenium
内容
ブラウザからDevToolsでElementsを確認すると、要素は確かに存在するが、SleniumからHTMLの要素を指定すると、no such element のエラーが出るときがあります。そのような場合は、iFrameが使われている可能性があります。
puts driver.page_source
そのような事象が発生したときは、Sleniumから取得しているHTMLを調べてみよう。標準出力させてテキストにリダイレクトすれば簡単に確認することができます。
iFrameを使っている場合、DevToolsで表示されるように、すべてのHTMLが展開された形式で表示されるわけではありません。リダイレクトして取得したテキストファイルから要素を検索してみてください。iFrameを使っていれば、検索しても要素見つからないはずです。存在しない要素を指定したため、当然no such element と出てくるはずです。
iFrameを複数使っている場合は、どこのiFrameに該当の要素が含まれているかは、1個1個確認していく他ありません。
iFrameのタグでid = hogeで指定されていた場合は、この1行でiFrameを展開させることができます。
driver.switch_to.frame 'hoge'
やり方は1つだけではなく、他にも色々とやりようはあるようです。
参考URL
https://www.selenium.dev/ja/documentation/webdriver/interactions/frames/