当前位置: 首页 > 面试题库 >

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

慕容兴贤
2023-03-14
问题内容

使用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>

问题答案:

只为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选择器用于几乎所有可能的操作!



 类似资料:
  • 问题内容: 我是django的新手。我正在使用简单的ajax 根据 课程* 选择动态更新选择领域 学期 。但是在提交表格时,我收到错误消息,请 选择一个有效的选择。 所选选项 不是可用选项之一。 代码如下: __* forms.py: views.py: loginForm.html: 请帮帮我。 问题答案: 问题是,要求所选选项位于其选择集中。 在上面的代码中,的选择是通过jquery动态更新的

  • 问题内容: 我有一个相当大的数据集和一个需要两个联接的查询,因此查询的效率对我来说非常重要。我需要根据联接的结果从数据库中检索3个满足条件的随机行。这里指出最明显的解决方案效率低下,因为 [这些解决方案]需要对所有表进行顺序扫描(因为需要计算与每一行关联的随机值-以便可以确定最小的行),即使对于中等大小的表也可能相当慢。 但是,那里的作者建议的方法(其中num_value是ID)对我不起作用,因为

  • 问题内容: 我的目标是在最后一个CSS上使用CSS ,但是这样做不是。 如何 只 选择最后一个孩子? 问题答案: 该伪类仍然无法可靠地跨浏览器使用。特别是,InternetExplorer<9和Safari<3.2绝对不支持它,尽管Internet Explorer 7和Safari 3.2 确实 支持。 最好的选择是向该项目显式添加一个(或类似的)类,然后应用。

  • 我启动我的应用程序与。但它不能找到类在我的依赖jar和给我.然后我在代码中打印类路径,发现依赖JarPath不在我的类路径上。然后我在我的jar的MANIFEST. MF中的头中添加依赖JarPath,并用启动我的应用程序,它成功了。 所以我的问题是,当使用和时,会生效吗?如果它没有生效,除了设置头之外,我如何在运行jar时设置类路径?

  • 问题内容: 我想按照这个代码在 然后像这样在传奇中使用它: 该减速器(甚至是减速器)看起来与我通常期望的减速器看起来非常不同。 谁能解释选择器是什么,以及reduce-reducer以及reducer如何适合redux-saga? 问题答案: 不是缩减器,而是确实的选择器,即知道如何从存储中提取特定数据的函数。 选择器 提供了一个额外的层,这样,如果您更改了商店结构,突然之间您不再在该位置,而是在

  • 我希望将JavaFXWebEngine与JavaScript库d3结合使用。js。我已经能够从Java中访问JavaScript库。使用JSObjects工作,如[1]所示: 如您所见,有一个通用方法“call”,我必须将要调用的JavaScript方法的名称作为字符串传递。为了使用JavaScript库d3。更舒适的是,我想为它提供一个Java包装器,例如。 创建这样的JavaScript包装器