Selectores de elementos de selenio: ¿pensé que xPath era el más lento?

Realicé algunas pruebas en un sitio web público para ver si podía encontrar diferencias en el rendimiento de algunos selectores de Selenium CSS diferentes. Ejecuté un centro con cinco nodos; mac / chrome / local, mac / safari / local, mac / ff / local, win7 / ie9 / localVM y win8 / ie10, localVM. Todas las pruebas se ejecutaban en paralelo, para tratar de simular cómo las ejecuto normalmente. Me sorprendió ver que los selectores xPath no resultaron ser el demonio que esperaba. Tal vez hay algo raro en mis pruebas? Alguien tiene alguna idea?

Aquí está el código de prueba ...

    int cycles = 500;
int yVal = 0;

getPage(“http://www.princeton.edu");

/* try an element that does not have an id*/
startStopwatch();
for (int i = 0; i < cycles; i++)
    yVal = driver.findElementByCssSelector("a[href='/main/news/events/']").getLocation().y;
print("By CSS: " + elapsedSeconds());

startStopwatch();
for (int i = 0; i < cycles; i++)
    yVal = driver.findElementByCssSelector("div[id='events'] a[href='/main/news/events/']").getLocation().y;
print("By CSS using id: " + elapsedSeconds());


startStopwatch();
for (int i = 0; i < cycles; i++)
    yVal = driver.findElementByXPath("//a[@href=\'/main/news/events/']").getLocation().y;
print("By xPath: " + elapsedSeconds());

/* try an element with an id */
//by id
startStopwatch();
for (int i = 0; i < cycles; i++)
    yVal = driver.findElementById("events").getLocation().y;
print("By Id: " + elapsedSeconds());

//by CSS
startStopwatch();
for (int i = 0; i < cycles; i++)
    yVal = driver.findElementByCssSelector("div[id='events']").getLocation().y;
print("By CSS: " + elapsedSeconds());

// an unnecessarily long xPath expression
startStopwatch();
for (int i = 0; i < cycles; i++)
    yVal = driver.findElementByXPath("//span[text()='News at Princeton']/ancestor::div[1]/following-sibling::div[1]").getLocation().y;
print("By longer xPath: " + elapsedSeconds());

// somewhat shorter xPath
startStopwatch();
for (int i = 0; i < cycles; i++)
    yVal = driver.findElementByXPath("//span[text()='Featured Events']/ancestor::div[1]").getLocation().y;
print("By shorter xPath: " + elapsedSeconds());

Estos son los resultados, que muestran que xPath se mantiene, todos los tiempos están en segundos para 500 iteraciones.

Safari fue, con mucho, el artista más errático, con tiempos extrañamente diferentes para cada prueba.

princeton.edu es una página web bastante común, con selectores bastante fáciles, pero parece sugerir que xPath no es tan malo. Encontré lo mismo al probar mi sitio de trabajo.

¿Alguna idea sobre lo que me puedo perder aquí?

Respuestas a la pregunta(1)

Su respuesta a la pregunta