読者です 読者をやめる 読者になる 読者になる

いもろぐ

思い立ったら書いていくスタイルで

要素が存在するかの確認

RSpec+SeleniumWebdriver

あるページで、条件によってそのHTML要素が表示される場合とされない場合があるとします。(例えば記事を書いた本人には「編集ボタン」が出るけど、他の人には出ない。それ以外の要素は同じ、とか)

その際に何も考えず

driver.find_element(:id, 要素)

をしてしまうと、要素が存在しない時には

Selenium::WebDriver::Error::NoSuchElementError

を返されます。「そんな要素無いよ」ってことでnilでも返してくれればいいのに?と思いました。

調べてたら

http://mirahalab.blogspot.jp/2013/02/selenium-2xhtml.html http://stackoverflow.com/questions/13677263/check-whether-element-is-present

が見つかって、なるほど find_elements (エレメン「ツ」)で要素数を取得して判別すると。

if @driver.find_elements(:id, "要素").size != 0
  return @driver.find_element(:id, "要素")
else
  # 設定されていない時は空文字を返す、、、とか?
  return ""
end

2014/6/27 追記 でもこの場合、elementsが見つからないとtimeoutまで待っちゃうのは困るんだよねぇ。。。 みなさんどうやってるのだろうか。