2011年11月2日水曜日

selenium-webdriverのクリック動作

driver.findElement(By.id(id)).click()はchromeだけで動作する
ほかのブラウザでも動作するが、コンポーネントがアクティブになる(?)ぐらいで、クリックイベントまでは実行されない

FireFoxやIEは
ボタンなどの場合:driver.findElement(By.id(id)).sendkey("\n")
チェックボックスなどの場合:driver.findElement(By.id(id)).sendkey(" ")
で解決。
お後がよろしいようで。

6 件のコメント:

  1. このサイトの情報かなり活用させて頂いてます。

    IEでもclick()が効く環境と効かない環境があって、
    困ってます。公式な情報にclick()はIEでは使えん!と書いてあるのですかね。

    いっそ、sendKeys(Keys.ENTER)に置き換えようかなぁと思案していますが…

    返信削除
    返信
    1. 遅くなりました、すみません。

      >公式な情報にclick()はIEでは使えん!と書いてあるのですかね。
      公式では見たことはないですね。世間的にも認知されている動作不備なので、ググったらいろいろ出てきます。
      http://stackoverflow.com/questions/5574802/selenium-2-0b3-ie-webdriver-click-not-firing

      ただ、2.22からIEDriverServerが採用され、動作に違いが出ているはずなので、それで解消されている可能性はあります。(私は未検証です、、)

      今のところは
      public void click(WebElement ele) {
      if (dr instanceof FirefoxDriver) {
      ele.sendKeys("\n");
      } else if (dr instanceof InternetExplorerDriver) {
      ele.sendKeys("\n");
      } else {
      ele.click();
      }
      }
      こうやって解決しています。
      ele.click()と違い、 ele.sendKeys("\n")は実際にマウスの動作をトレースしているわけではないので、コンポーネントに対するオンマウスイベントなどは実行されないので、注意が必要です。

      削除
    2. 追記です。
      IEでもdlタグにはWebElement#clickが実行できることは確認しています。
      もしかして、クリック対象のタグによって、
      >IEでもclick()が効く環境と効かない環境があって、
      という現象が発生していませんか?

      違うならもっと詳しく知りたいですね、OSの種類、IEのバージョン、bit数など、教えていただけたらうれしいです。

      また、シンプルなWeb画面ほど、素直に動作するようです。

      削除
  2. なるほど、ご丁寧にありがとうございますm(__)m

    WinXP+IE7、Win7+IE9は大体いけます。buttonタグでもaタグでも。
    しかしながら、WinXP+IE8(OKな環境もあり)はダメですねぇ


    謎です…

    返信削除
    返信
    1. とりあえずIEDriverServerを使用したWindXP+IE8環境では
      dlタグに引き続き、divタグへのクリックも
      WebElement#click();
      が正常稼動することを確認しました。
      ついでにSeleniumのバージョンはいくつですか?
      また、よかったら教えてください。

      削除
  3. 2.23を使っています。.1は流石にパスです(;^ω^)

    返信削除