Frage

Gibt es einen großen Unterschied in der Zeit dauert es eine lange XPath als eine kurze XPath zu bewerten?
Ex. Gibt es einen Unterschied in der Leistung zwischen
/div[@id = 'id1']/label[contains(text(), 'Hello')/../../descendant::input
und
//input

Was ist mit dem Unterschied zwischen der Verwendung By.id("id1")
und
By.Xpath("//*[@id='id1']")

War es hilfreich?

Lösung

Ich bin froh, dass Sie gefragt, fand ich die Antworten überraschen.

  • Short XPath ist schneller als lange XPath, aber nicht viel
  • Ein Firefox nach Namen Suche ist schneller als lange XPath aber eine tote Hitze mit kurzen XPath (manchmal schneller)
  • Im Internet Explorer, By.name ist viel langsamer als XPath

Dies scheint angesichts der Führung zu fliegen Simon Stewart Wieder wurde zu geben. IE XPath Leistung, so dass ich es mit einem Körnchen Salz nehmen würde, aber in dem folgenden Code, es ist ziemlich konsistent

Ich habe einen schnellen Test geschrieben, dies zeigt. Es sieht für das Suchfeld auf der 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();
}
}

Dies ergibt die Ausgabe:

Mit Firefox-Treiber.
Die lange XPath-Suche dauerte 0.13667022 Sekunden.
Die kurze XPath-Suche dauerte 0,024628577 Sekunden.
Der By.name Nachschlag nahm 0,025209911 Sekunden.

Verwenden von Internet Explorer-Treiber.
Die lange XPath-Suche dauerte 0,196125248 Sekunden.
Die kurze XPath-Suche dauerte 0,164044262 Sekunden.
Der By.name Nachschlag nahm 1,005109964 Sekunden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top