web-dev-qa-db-ja.com

Selenium Webdriverのクリックコマンドが機能しない

最近、Selenium IDEコードをSelenium Webドライバーにエクスポートしました。IDEまたはSelenium Webドライバーが動作しない、またはまったくサポートしていないと主張しています。

現在、以前はSelenium IDEで機能していたのに、ボタンをクリックしてもWebドライバーで機能しない理由を見つけることに取り組んでいます。私のブラウザはFF 13で、OSはUbuntuです。

コードスニペット

WebElement loginButton = driver.findElement(By.name("submit"));
loginButton.click();

以前に試したことがあります

driver.findElement(By.name("submit")).click();

ただし、上記の行も失敗しました。要素は選択されていますが、希望どおりにログインしません。同様の問題を持つ他のページを見つけましたが、FirefoxではなくInternet Explorerに問題があるようです。私は問題について考えたくさえありませんIEは私に道を譲ります。

おかげで、

追伸私が書いたすべてのテストを失うことなく、Selenium IDEからSelenium Webdriverに移行するためのより良い方法のヒントは、この問題も解決する可能性があります。

35

要素が存在することが確実にわかっている場合、これを試してクリックをシミュレートできます-.Click()が機能しない場合

driver.findElement(By.name("submit")).sendKeys(Keys.RETURN);

または

driver.findElement(By.name("submit")).sendKeys(Keys.ENTER);
76
TheLifeOfSteve

注意すべき主要なことは、ボタンが有効かどうかです。あなたはまだそれらをクリックすることができ、何も倒れず、要素はそこにありますが、クリックする準備ができていないので、何もしません。

私はwebdriverを使用してきましたが、これを理解するためにほとんどの時間を費やしました!

次の方法は確実に機能するようです(私の環境では1つのボタンで!)

    private void TryClick(By selector)
    {
        var wait = WaitUpTo(TimeSpan.FromSeconds(10));
        var element = wait.Until(ExpectedConditions.ElementIsVisible((selector)));

        //really important bit!
        WaitUpTo(TimeSpan.FromSeconds(5))
            .Until(d => element.Enabled);

        element.Click();
    }

あなたはそれを次のように使います

TryClick(By.XPath("//button[contains(.//*,'Some Text')]"));
8
JonnyRaa

こちらをご覧ください https://code.google.com/p/Selenium/issues/detail?id=6756 In crux

システムの表示設定を開いて、フォントサイズが100%に設定されていることを確認してください

3
Nishant

私はFirefoxを使用していたので、何らかの理由で、過去2ヶ月間は動作していましたが、クリックコマンドを使用していませんでした。私の気持ちは、sendKeysを利用することで、このページは問題を解決しました。今、私はsendKeys(Keys.Enter)を使用しています

2
user2743318

みなさん、すべての回答をありがとう!私は解決策を見つけました、私の質問で十分なコードを提供しなかったことがわかりました。

問題は[〜#〜] not [〜#〜] click()関数でしたが、代わりに私のプロジェクトで使用されるcas認証に関連していました。 Seleniumでは、IDE私のログインテストは、次の場所に「open」コマンドを実行しました。

/cas/login?service=https%1F%8FAPPNAME%2FMOREURL%2Fj_spring_cas_security

うまくいきました。テストをSelenium Webdriverにエクスポートし、その場所を自然に保存しました。 Selenium Webdriverのコマンドは、

driver.get(baseUrl + "/cas/login?service=https%1A%2F%8FAPPNAME%2FMOREURL%2Fj_spring_cas_security");

理由により、上記が失敗したことをまだ理解していない。に変更したとき、

driver.get(baseUrl + "MOREURL/");

クリックコマンドが突然機能し始めました...なぜこれが正確なのかを理解できれば、この回答を編集します。

注:会社の製品を保護するために上記で使用したURLを隠しています。

2

どちらのバージョンのコードでも問題はありません。これを引き起こしているものは何でも、それはそうではありません。

ロケーターをトリプルチェックしましたか?あなたの要素は間違いなくid = submitではなくname = submitを持っていますか?

2
el roso