Я рад, что вы спросили, я нашел ответы удивительными.
- Short xpath быстрее, чем long xpath, но ненамного
- В Firefox поиск по имени быстрее, чем в длинном xpath, но мертвый жар с коротким xpath (иногда быстрее)
- В Internet Explorer By.name имеет значение намного медленнее, чем xpath
Это, похоже, противоречит руководству, которое Саймон Стюарт давал в отношении производительности xpath для IE: так что я бы взял это с недолгой солью, но в приведенном ниже коде это довольно непротиворечиво.
Я написал быстрый тест, который иллюстрирует это. Он ищет окно поиска в 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();
}
}
Это дает вывод:
Использование драйвера Firefox.
Длинный поиск XPath занял 0,13667022 секунд.
Короткий поиск XPath занял 0,024628577 секунд.
Поиск By.name занял 0,025209911 секунд.
Использование драйвера Internet Explorer.
Длинный поиск XPath занял 0,196125248 секунд.
Короткий поиск XPath занял 0,164044262 секунды.
Поиск By.name занял 1,005109964 секунды.