我正在使用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/)上查看它是否是您正在尝试尝试解释的应用程序。

10-07 18:56
查看更多