0

我正在为我的应用程序编写自动化测试。我想到的测试之一是检查应用程序中的 XSS 漏洞(特别是脚本/标记注入)。

假设我有一个接受文本输入的字段:

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

并假设它在其他地方打印输入消息,如下所示:

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

最简单的测试用例会尝试输入标记,<b>Hello</b>而不是纯文本。

如何验证标记实际上并未在浏览器上呈现?我能想到的一种肮脏方式是深入到显示输入的元素。

@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 回答