Skip to content

normalize space not parsing correctly under some circumstances #386

@skyhirider

Description

@skyhirider

I am using an xpath that includes a special character and the xpath is working in Firefox but failing in HtmlUnit when called via the driver.

What is odd is that it works for "@x" but fails for "@x" - case sensitivity breaks it somehow. Its also interesting that I noticed this earlier when searching for "=)" as part of a string, I presume there are other special cases that are not working correctly.

Edit: tested more and same issue with ")X" but lowercase x works fine.

The code I used to test

public class HtmlUnitXpath {
    public static void main(String[] args) {
        System.setProperty("webdriver.gecko.driver", "\\geckodriver.exe");
        FirefoxOptions options = new FirefoxOptions();
        options.setLogLevel(FirefoxDriverLogLevel.FATAL);
        WebDriver ffDriver = new FirefoxDriver(options);
        WebDriver huDriver = new HtmlUnitDriver(BrowserVersion.FIREFOX, true) {
            @Override
            protected WebClient modifyWebClient(WebClient client) {
                final WebClient webClient = super.modifyWebClient(client);
                WebClientOptions options = webClient.getOptions();
                options.setCssEnabled(true);
                options.setThrowExceptionOnScriptError(false);
                webClient.setJavaScriptErrorListener(new SilentJavaScriptErrorListener());

                return webClient;
            }
        };
        try {
            doStuff(ffDriver);
            doStuff(huDriver);
        } finally {
            ffDriver.close();
            huDriver.close();
        }
    }

    private static void doStuff(WebDriver driver) {

        String misbehavingString = "@X";
        String pageAsText = "<body><table><tr><td>" + misbehavingString + "</td></tr></table></body>";
        driver.get("data:text/html;charset=utf-8," + pageAsText);
        String text = driver.findElement(By.xpath("//body")).getText();
        System.out.println(driver.getClass().getName() + " printed " + text);
        int numberOfOccurences = driver.findElements(By.xpath("//td[normalize-space()='" + misbehavingString + "']")).size();
        System.out.println(driver.getClass().getName() + " found " + numberOfOccurences);
    }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions