4

HTML5 の次のスニペットがあるとします。

<form method="get" action="logginValidation.php">
    <input type="text" required="" name="username">
    <button class="btn" type="submit">Se connecter</button>
</form>

Selenium を使用して、フィールドを空のままにしてボタンを押します。フォームは期待どおりに検証されませんが、このフィールドが無効であること、およびこのフィールドに関連付けられたメッセージがあることを確認するにはどうすればよいですか。

私が調査していないことの 1 つは、JavaScript ライブラリをロードして Twitter Bootstrap を使用していることです。これらのライブラリが私にいたずらをしていないかどうか、および検証が本当に Firefox ブラウザから来ているかどうかを再確認する必要があります。

4

3 に答える 3

1

セレンのドキュメントから:

現在、css セレクター ロケーターは、css3 の名前空間、いくつかの疑似クラス (:nth-of-type、:nth-last-of-type、:first-of-type、:last-of- type、:only-of-type、:visited、:hover、:active、:focus、:indeterminate) および疑似要素 (::first-line、::first-letter、::selection、::before、::)後)。

つまり、:required、:invalid、:valid は、選択または操作できる疑似要素ではないということです。

この制限を回避するには、次のページにあるテキストに対して VerifyNotText を実行します。理想的ではありませんが、機能します。

于 2012-09-24T13:55:24.973 に答える
0

現在、私は社内プロジェクト(従業員管理システムのようなもの)をセレンテストでカバーしています。そのため、フォームには多くの必須入力があります。いずれかが空の場合、フォーム全体が検証されます。また、入力付近のテキスト ラベルが赤くなり、適切なバリデータ メッセージが表示されます。バリデーターの適切な作業をチェックするための私のアプローチは非常に簡単です: - 入力に近いラベルの色を取得するための get color text メソッドを書きました (赤の場合、バリデーターはフォームの送信に取り組んでいます)

public String jsGetColor(String css){
        JavascriptExecutor js = (JavascriptExecutor) driver;
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("var x=$(\'"+css+"\');");
        stringBuilder.append("return x.css('color')");
        String res= (String) js.executeScript(stringBuilder.toString());
        return res;
    }
// the way i use this method:

String defaultTimeOffLabelColor=(String)jsGetColor(propertyKeysLoader("rms.home.timeoffsportlet.addnewtimeoff.typetimeofflabel"));

        driverClickByCssSelector("rms.home.timeoffsportlet.addnewtimeoff.submitbutton");


        String validationTimeOffLabelColor=(String)jsGetColor(propertyKeysLoader("rms.home.timeoffsportlet.addnewtimeoff.typetimeofflabel"));

        //verifying validation works properly using Assert mechanism
 Assert.assertFalse("validation is invalid", validationTimeOffLabelColor.equals(defaultTimeOffLabelColor));

また、バリデーターが機能するとエラーメッセージが表示されることを追加する必要があります。したがって、このメッセージのロケーターを見つけて、適切なテキストを比較できます。フォームの送信など、バリデーターが機能しないその他のケースでは、バリデーターのメッセージのスタイルは「display:none」のようなものになります。したがって、すべてが問題ないことを理解するには、メッセージが表示されるかどうかを確認するだけです。

driver.findElement(By.cssSelector(...blabla...)).isDisplayed()

そして最後のポイント。バリデータのメッセージを検証したい場合。

public void addNewTimeOffValidatorsMessagesCheck(String expectedValidationMsg)  {
        Assert.assertTrue(driver.findElement(By.cssSelector(propertyKeysLoader("rms.home.timeoffsportlet.addnewtimeoff.validationmessage"))).getText().trim().equals(expectedValidationMsg));
    }
 addNewTimeOffValidatorsMessagesCheck("Timeoff type was not selected!");

これで、もう少し明確になることを願っています)

于 2012-09-24T14:31:43.720 に答える