我使用Selenium自动化来测试攻击者可能发送的恶意字符串。但是,我遇到了方法WebDriver.sendKeys(...)
的问题,其中文本值没有按字面意义发送到浏览器。
例如,字符串../../../../../../../../../../../etc/hosts
正在自动修改,以便浏览器中的文字改为/var/folders/<...>/hosts
。
导致问题的代码:
public void enterCommentText(String text) {
WebElement textArea = driver.findElement(By.xpath(xpathForCommentTextArea()));
textArea.clear();
textArea.sendKeys(text);
}
调用textArea.sendKeys(text)
时,字符串text
包含我要发送的文字文件路径。但是,浏览器中显示的字符串已经过参数替换。有没有办法让sendKeys(text)
按字面意思处理字符串值?
我目前的解决方法是一次发送一个字符串中的每个字符。
for(int i = 0; i < text.length(); i++) {
textArea.sendKeys(text.substring(i, i+1));
}
我正在使用Java 8,Selenium 3.8.1和Chrome 64.0.3282.186。
答案 0 :(得分:2)
经过多次尝试,我无法重现此问题。 sendKeys()
始终发送原始路径字符串而不进行修改。
要尝试的是:
(1)在方法中添加一些(.sendKeys()
之前和之后的一个)System.out.println("Test:" + text);
以验证它是否正确且未在过程中更早修改,
(2)尝试使用其他浏览器
(3)尝试使用相同的代码,但在http://www.globalsqa.com/samplepagetest/
之类的其他页面上查看是否是您正在测试的应用尝试解释的内容。