如何防止Selenium WebElement sendKeys()方法执行参数替换

时间:2018-03-06 22:25:12

标签: java selenium selenium-webdriver selenium-chromedriver

我使用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。

1 个答案:

答案 0 :(得分:2)

经过多次尝试,我无法重现此问题。 sendKeys()始终发送原始路径字符串而不进行修改。

要尝试的是:

(1)在方法中添加一些(.sendKeys()之前和之后的一个)System.out.println("Test:" + text);以验证它是否正确且未在过程中更早修改,

(2)尝试使用其他浏览器

(3)尝试使用相同的代码,但在http://www.globalsqa.com/samplepagetest/之类的其他页面上查看是否是您正在测试的应用尝试解释的内容。