0

アプリケーションの自動テストを作成中です。私が考えたテストの 1 つは、アプリケーションの XSS 脆弱性 (具体的にはスクリプト/マークアップ インジェクション) をチェックすることです。

テキスト入力を受け入れるフィールドがあるとします。

<input id="messageInput" name="message" />

そして、次のように入力メッセージ else を出力するとします。

<p id="messageOutput">You entered ${message}</p>

<b>Hello</b>最も単純なテスト ケースでは、プレーン テキストの代わりになどのマークアップをフィードしようとします。

マークアップが実際にブラウザーでレンダリングされていないことを確認するにはどうすればよいですか? 私が考えることができる汚い方法の 1 つは、入力を表示する要素に移動することです。

@FindBy(id = "messageOutput")
WebElement messageOutput;

public boolean isMarkupRendered() {
    try {
        messageOutput.findElement(By.tagName("b"));
        return true;
    } catch (NoSuchElementException e) {
        return false;
    }
}

ただし、これは私のメソッドを私が提供する可能性のある種類のテストデータに結び付けます-次のような入力を操作するには十分に一般的ではありません

<script>document.body.style.backgroundColor='red'</script>

ここに何か提案はありますか?Selenium はこれを行うためのよりクリーンな方法を提供していますか?

4

1 に答える 1

1

これまでのところ、要素の css プロパティ (特に色) を取得することに遭遇したことはありません。

 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;

    }

したがって、要素の種類が確実にわかっている場合は、要素の css プロパティを操作するという考えがあります: text 、 picture など。

- マークアップが実際にブラウザーでレンダリングされていないことを確認するにはどうすればよいですか? - セレンで何かが存在するか存在しないかを検証する方法はたくさんあります:

input.findElements(By.xpath("//xpath")).size() > 0


driver.findElement(By.cssSelector(html>blablabla....)).isDisplayed()

public bool IsElementPresent(By selector)
{
    return driver.FindElements(selector).Any();
}

これが何らかの形で役立つことを願っています)

于 2012-09-19T11:56:48.227 に答える