0

私はそのようなコードを持っています:

until @driver.find_element(:id, "ctl00_cp_lblC").displayed?
  puts "invalid page solution"
  enter_page
end

そして、ページに何らかのIDを持つ要素が含まれるようになるまで、何らかの方法を実行する必要があります。今では、セレンがこのIDを持つ要素を見つけることができなかったというエラーがスローされます。私は何を間違っていますか、そしてそれを解決する方法は?

また、watirの方がやりやすいのではないでしょうか?

4

2 に答える 2

0

要素が見つからない場合、Webdriver はエラーをスローします。表示されますか? オブジェクトが非表示かどうかのみを示します。ご覧のとおり、オブジェクトが html にない場合、NoSuchElementFound 例外が発生します。

Javaについてはお詫びしますが、アイデアを得る必要があります。

Boolean elementFound = false;

    do {
        getDriver().manage().timeouts().implicitlyWait(500, TimeUnit.MILLISECONDS);
        try {
             elementFound = getDriver().findElement(By.id("ct100_cp_lblC")).isDisplayed();

        }
        catch (NoSuchElementException e){
        }   
        getDriver().navigate().refresh();  

    } while (!elementFound);

    getDriver().manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);

無限ループを停止するには追加のコードが必要ですが、アイデアを得る必要があります。

これは Watir API と WebDriver API の大きな違いですが、慣れ親しんだものだと思います。

于 2013-09-06T14:28:32.560 に答える
0

RobbieWareham が述べたように、要素が存在しない場合、find_element は例外をスローします。あなたはしたい:

  1. 要素が見つからないという例外をレスキューし、enter_page メソッドを呼び出します
  2. これらすべてを wait.until でラップして、無期限に実行されないようにします。

これは次のようになります。

wait = Selenium::WebDriver::Wait.new(:timeout => 5) # seconds
begin
  element = wait.until do
    begin
      @driver.find_element(:id, "ctl00_cp_lblC")
    rescue
      enter_page
    end
  end
ensure
  @driver.quit
end

Watirでは、それはより簡単になります. それは単に次のようになります。

browser.element(:id => "ctl00_cp_lblC").wait_until_present

または、要素が存在しないときに何かをする必要がある場合:

browser.wait_until(2) do
  present = browser.element(:id => "ctl00_cp_lblC").present?
  enter_page unless present 
  present
end
于 2013-09-06T14:34:22.113 に答える