Selenium 2 WebDriver -Chrome- JavaScriptを介して設定されたテキストボックスから値を取得する

StackOverflow https://stackoverflow.com/questions/3767217

  •  04-10-2019
  •  | 
  •  

質問

Selenium 2(GoogleCodeの最新リリース)を使用していますが、Chromeを発射してURLに行っています。

ページがロードされたとき、いくつかのJavaScriptはテキストボックスの値を設定するために実行されます。

私はそれが行うIDによるテキストボックスを見つけるように言いますが、それはその中に値がありません(それが見つけた値をハードコードすると)。

Pagesource EG Console.WriteLine(driver.Pagesource)を見る; HTMLを表示し、テキストボックスが空です。

私は使用しようとしました:

driver.findelement(by.id( "txtboxid")要素を取得すると、それも値を取得しません。

また、ChromeWebelement CWE = new ChromeWebelement(ドライバー、 "Txtboxid")を試しました。 (これは古いデータについて不平を言っています)。

何かご意見は?

ジョン

役に立ちましたか?

解決

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;
  }

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

他のヒント

最後に答えを見つけました!これは私に役立つコードです

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

Ruby(実際にはキュウリ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 ++で同様のものを使用できますか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top