2010-08-19 58 views
3

评估长xpath所需时间与短xpath相比有什么重大区别?例子:
Ex。 是否有使用 By.id("id1")

By.Xpath("//*[@id='id1']")Webdriver Xpath性能

回答

13

我很高兴你问之间
/div[@id = 'id1']/label[contains(text(), 'Hello')/../../descendant::input

//input

关于什么区别之间的性能差异,我找到了答案令人吃惊。

  • 短XPath是比长的XPath快,但不是很多
  • 在Firefox按名称搜索是比长的XPath,但为短的XPath(有时更快)热死
  • 在Internet Explorer更快,通过。名称是远比XPath的

这似乎在指导西蒙·斯图尔特一直给人重新面对飞:IE浏览器的性能的XPath,所以我把它当作一粒盐,但在下面的代码中,它非常一致。

我写了一个快速测试来说明这一点。它看起来在搜索框上的谷歌

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秒。