1

Selenium webdriver を使用しており、テストの失敗を報告する前に、ページ オブジェクトにページを複数回表示させようとしています。私の問題は、開始レスキュー ブロックでキャッチされていないエラーが発生していることです。
ここにエラーがあります

Selenium::WebDriver::Error::NoSuchElementError: 要素が見つかりません: {"method":"id","selector":"does not exist"}

class ManageMembers < Nav

  def initialize
    super
    ready = false # Used to indicate if all elements expected are present 
    tryCount = 0# A counter to track the number of attempts to 
    while(ready == false)
      puts "initalizing managemembers"
      #things on the side menue 
      begin
        $driver.find_element(:id, "does not exist")
        $driver.find_element(:id, "sidebar")
        $driver.find_element(:id, "sidebar").find_element(:link, "Manage Members")
        $driver.find_element(:id, "sidebar").find_element(:link, "Create Member")
        @sidebar = true
      rescue @sidebar = false
      end
4

2 に答える 2

1

これを回答として追加して、この質問を回答済みとしてマークできるようにします。

class ManageMembers < Nav
  def initialize
    super
    ready = false # Used to indicate if all elements expected are present 
    tryCount = 0# A counter to track the number of attempts to 
    while(ready == false)
      puts "initalizing managemembers"
      #things on the side menue 
      begin
        $driver.find_element(:id, "does not exist")
        $driver.find_element(:id, "sidebar")
        $driver.find_element(:id, "sidebar").find_element(:link, "Manage Members")
        $driver.find_element(:id, "sidebar").find_element(:link, "Create Member")
        @sidebar = true
      rescue Exception => e 
        @sidebar = false
      end
于 2012-11-08T18:57:34.077 に答える
0

begin ... rescue ... endインライン構文 ( ) の代わりにブロック構文 ( ) を使用する場合はdo_something rescue recover_from_something、次の行にレスキュー ステートメントを配置する必要があります。現在、両方の構文スタイルを混同しています。

begin
  $driver.find_element(:id, "does not exist")
  $driver.find_element(:id, "sidebar")
  $driver.find_element(:id, "sidebar").find_element(:link, "Manage Members")
  $driver.find_element(:id, "sidebar").find_element(:link, "Create Member")
  @sidebar = true
rescue
  @sidebar = false
end

begin ... endこれは、ブロック全体をレスキューする (完全なステートメントにする)場合には当てはまりませんが、見栄えが悪いため、完全なブロック構文を使用することをお勧めします。

begin
  $driver.find_element(:id, "does not exist")
  $driver.find_element(:id, "sidebar")
  $driver.find_element(:id, "sidebar").find_element(:link, "Manage Members")
  $driver.find_element(:id, "sidebar").find_element(:link, "Create Member")
  @sidebar = true
end rescue @sidebar = false

繰り返しますが、この最後のビットを実行しないでください ;)

于 2012-11-08T19:10:33.043 に答える