一尘不染

与findElement()一起使用的最有效的选择器是什么?

selenium

使用Selenium Web测试时,有几种方法可以识别WebElement。

根据我的经验,我使用了以下选择器:

  • 类名 -By.className()
  • CSS选择器 -By.cssSelector()
  • ID -By.id()
  • 连结文字 -By.linkText()
  • 名称 -By.name()
  • 标签名称 -By.tagName()
  • XPath的 -By.xpath()

显然,当只有一个选项可用于定位元素时,我们必须使用该选项,但是当可以使用多种方法(例如:下面的div)时,应如何确定使用哪种方法呢?是否有比其他选择器
更有效的 选择器?有一些 更耐用 吗?

<div class="class" id="id" name="name">Here's a div</div>

阅读 333

收藏
2020-06-26

共1个答案

一尘不染

只为s&gs …

我为每个标识符方法计时,它们分别在五个以上的时间上查找div,并平均查找元素的时间。

WebDriver driver = new FirefoxDriver();
driver.get("file://<Path>/div.html");
long starttime = System.currentTimeMillis();
//driver.findElement(By.className("class"));
//driver.findElement(By.cssSelector("html body div"));
//driver.findElement(By.id("id"));
//driver.findElement(By.name("name"));
//driver.findElement(By.tagName("div"));
//driver.findElement(By.xpath("/html/body/div"));
long stoptime = System.currentTimeMillis();
System.out.println(stoptime-starttime + " milliseconds");
driver.quit();

它们按平均运行时间在下面排序。

  • CssSelector :(796ms + 430ms + 258ms + 408ms + 694ms)/ 5 = 〜517.2ms
  • 类名 :(670ms + 453ms + 812ms + 415ms + 474ms)/ 5 = 〜564.8ms
  • 名称 :(342ms + 901ms + 542ms + 847ms + 393ms)/ 5 = 〜605ms
  • ID :(888ms + 700ms + 431ms + 550ms + 501ms)/ 5 = 〜614ms
  • Xpath :(835ms + 770ms + 415ms + 491ms + 852ms)/ 5 = 〜672.6ms
  • 标签名 :(998ms + 832ms + 1278ms + 227ms + 648ms)/ 5 = 〜796.6ms

阅读@JeffC的答案后,我决定将By.cssSelector()classname,tagname和id作为搜索词进行比较。同样,结果如下。

WebDriver driver = new FirefoxDriver();
driver.get("file://<Path>/div.html");
long starttime = System.currentTimeMillis();
//driver.findElement(By.cssSelector(".class"));
//driver.findElement(By.className("class"));
//driver.findElement(By.cssSelector("#id"));
//driver.findElement(By.id("id"));
//driver.findElement(By.cssSelector("div"));
//driver.findElement(By.tagName("div"));
long stoptime = System.currentTimeMillis();
System.out.println(stoptime-starttime + " milliseconds");
driver.quit();
  • By.cssSelector(".class") :(327ms + 165ms + 166ms + 282ms + 55ms)/ 5 = 〜199ms
  • By.className("class") :(338ms + 801ms + 529ms + 804ms + 281ms)/ 5 = 〜550ms
  • By.cssSelector("#id") :(58ms + 818ms + 261ms + 51ms + 72ms)/ 5 = 〜252ms
  • By.id("id") -(820ms + 543ms + 112ms + 434ms + 738ms)/ 5 = 〜529ms
  • By.cssSelector("div") :(594ms + 845ms + 455ms + 369ms + 173ms)/ 5 = 〜487ms
  • By.tagName("div") :(825ms + 843ms + 715ms + 629ms + 1008ms)/ 5 = 〜804ms

由此看来,您应该将CSS选择器用于几乎所有可能的操作!

2020-06-26