4

评估长 xpath 和短 xpath 所需的时间是否有重大差异?
前任。
/div[@id = 'id1']/label[contains(text(), 'Hello')/../../descendant::input
和之间是否存在性能差异
//input

By.id("id1")
使用和使用有什么区别
By.Xpath("//*[@id='id1']")

4

1 回答 1

13

我很高兴你问,我发现答案令人惊讶。

  • 短 xpath 比长 xpath 快,但快不了多少
  • 在 Firefox 上,按名称搜索比长 xpath 快,但短 xpath 死热(有时更快)
  • 在 Internet Explorer 上,By.namexpath 慢得多

这似乎与 Simon Stewart 给出的指导背道而驰:IE 的 xpath 性能,所以我对它持保留态度,但在下面的代码中,它非常一致。

我写了一个快速测试来说明这一点。它在 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();
}
}

这给出了输出:

使用火狐驱动。
长 XPath 查找耗时 0.13667022 秒。
简短的 XPath 查找耗时 0.024628577 秒。
By.name 查找耗时 0.025209911 秒。

使用 Internet Explorer 驱动程序。
长 XPath 查找耗时 0.196125248 秒。
简短的 XPath 查找耗时 0.164044262 秒。
By.name 查找耗时 1.005109964 秒。

于 2010-09-10T04:22:07.670 回答