使用Selenium Web测试时,有几种方法可以识别WebElement。
根据我的经验,我使用了以下选择器:
By.className()
By.cssSelector()
By.id()
By.linkText()
By.name()
By.tagName()
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();
它们按平均运行时间在下面排序。
阅读@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 = 〜199msBy.className("class")
:(338ms + 801ms + 529ms + 804ms + 281ms)/ 5 = 〜550msBy.cssSelector("#id")
:(58ms + 818ms + 261ms + 51ms + 72ms)/ 5 = 〜252msBy.id("id")
-(820ms + 543ms + 112ms + 434ms + 738ms)/ 5 = 〜529msBy.cssSelector("div")
:(594ms + 845ms + 455ms + 369ms + 173ms)/ 5 = 〜487msBy.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包装器