我正在使用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。
最佳答案
经过反复尝试,我无法重现该问题。 sendKeys()
始终发送原始路径字符串,并且未被修改。
可以尝试的事情是:
(1)在方法中添加一些(在.sendKeys()
之前一个,在System.out.println("Test:" + text);
之后一个)以验证它正确无误,并且在过程的早期没有被修改,
(2)尝试使用其他浏览器,
(3)尝试使用相同的代码,但在不同的页面(例如http://www.globalsqa.com/samplepagetest/
)上查看它是否是您正在尝试尝试解释的应用程序。