3

私は Selenium 2 (Googlecode からの最新リリース) を使用しており、Chrome を起動して URL にアクセスしています。

ページがロードされると、JavaScript が実行されてテキストボックスの値が設定されます。

IDでテキストボックスを見つけるように指示しましたが、その中に値がありません(値をハードコーディングすると、それが見つかります)。

Console.WriteLine(driver.PageSource); などの PageSource を見る。HTMLを表示し、テキストボックスは空です。

私は使用してみました:

driver.FindElement(By.Id("txtBoxId") を使用して要素を取得しますが、それも値をフェッチしません。

ChromeWebElement cwe = new ChromeWebElement(driver, "txtBoxId"); も試しました。(古いデータについて不平を言う)。

何かご意見は?

ジョン

4

3 に答える 3

4

最後に答えを見つけました!これは私のために働くコードです

WebDriverWait wait = new WebDriverWait(_driver, new TimeSpan(0,0,60));
wait.Until(driver1 => _driver.FindElement(By.Id("ctl00_Content_txtAdminFind")));
Assert.AreEqual("Home - My Housing Account", _driver.Title);

これが私のソースです! http://code.google.com/p/selenium/issues/detail?id=1142

于 2011-05-03T20:26:20.633 に答える
2

Selenium 2 には、DOM の要素用に組み込まれた待機関数がありません。これは Selenium 1 と同じでした。

何かを待つ必要がある場合は、次のようにできます

  public string TextInABox(By by)
  {
    string valueInBox = string.Empty;
    for (int second = 0;; second++) {
      if (second >= 60) Assert.Fail("timeout");
      try
      {
        valueInBox = driver.FindElement(by).value;
        if (string.IsNullOrEmpty(valueInBox) break;
      }
      catch (WebDriverException)
      {}
      Thread.Sleep(1000);
    }
    return valueInBox;
  }

または、それらの線に沿った何か

于 2010-09-23T21:47:51.200 に答える
1

私はRuby(実際にはcucumber watir-webdriver)を介してwebdriverを使用していますが、これを行う傾向があります:

  def retry_loop(interval = 0.2, times_to_try = 4, &block)
    begin
      return yield
    rescue
      sleep(interval)
      if (times_to_try -= 1) > 0
        retry
      end
    end
    yield
  end

次に、javascript の書き込みなどによってコンテンツが表示されるたびに、次のように retry_loop でラップします。

    retry_loop do #account for that javascript might fill out values
      assert_contain text, element
    end

お気づきのように、既に存在している場合、パフォーマンスが低下することはありません。逆の場合 (何かが存在しないことを確認する) は、明らかにタイムアウトに到達する必要があります。メソッドとテスト コードに詳細を詰め込む方法が気に入っています。

おそらく、C++ で同様のものを使用できますか?

于 2010-10-15T10:35:53.687 に答える