Is there a major difference in the time it takes to evaluate a long xpath than a short xpath?
Ex.
Is there a performance difference between/div[@id = 'id1']/label[contains(text(), 'Hello')/../../descendant::input
and//input
What about the difference between using
By.id("id1")
andBy.Xpath("//*[@id='id1']")
I'm glad you asked, I found the answers surprising.
This seems to fly in the face of the guidance Simon Stewart has been giving re: IE's xpath performance, so I'd take it with a grain of salt, but in the code below, it's pretty consistent.
I've written a quick test that illustrates this. It looks for the search box on the Google
package com.PeterNewhook;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
public class FooTest {
public static void main(String[] args) {
long start;
long end;
WebDriver driver;
String longXpath = "/html/body/span[@id='main']/center/span[@id='body']/center/form/table/tbody/tr/td[2]/div[@class='ds']/input[@name='q']";
String shortXpath = "//input[@name='q']";
String elementId = "q";
System.out.println("Using Firefox driver.");
driver = new FirefoxDriver();
driver.get("http://google.com");
start = System.nanoTime();
driver.findElement(By.xpath(longXpath));
end = System.nanoTime()-start;
System.out.println("The long XPath lookup took " + (double)end/1000000000.0 + " seconds.");
start = System.nanoTime();
driver.findElement(By.xpath(shortXpath));
end = System.nanoTime() - start;
System.out.println("The short XPath lookup took " + (double)end / 1000000000.0 + " seconds.");
start = System.nanoTime();
driver.findElement(By.name(elementId));
end = System.nanoTime() - start;
System.out.println("The By.name lookup took " + (double)end / 1000000000.0 + " seconds.");
driver.close();
System.out.println("\nUsing Internet Explorer driver.");
driver = new InternetExplorerDriver();
driver.get("http://google.com");
start = System.nanoTime();
driver.findElement(By.xpath(longXpath));
end = System.nanoTime()-start;
System.out.println("The long XPath lookup took " + (double)end/1000000000.0 + " seconds.");
start = System.nanoTime();
driver.findElement(By.xpath(shortXpath));
end = System.nanoTime() - start;
System.out.println("The short XPath lookup took " + (double)end / 1000000000.0 + " seconds.");
start = System.nanoTime();
driver.findElement(By.name(elementId));
end = System.nanoTime() - start;
System.out.println("The By.name lookup took " + (double)end / 1000000000.0 + " seconds.");
driver.close();
}
}
This gives the output:
Using Firefox driver.
The long XPath lookup took 0.13667022 seconds.
The short XPath lookup took 0.024628577 seconds.
The By.name lookup took 0.025209911 seconds.
Using Internet Explorer driver.
The long XPath lookup took 0.196125248 seconds.
The short XPath lookup took 0.164044262 seconds.
The By.name lookup took 1.005109964 seconds.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With