当前位置: 首页 > 知识库问答 >
问题:

InvalidSelectorException和NoSuchElementException之间的差异以及定位项

夏季萌
2023-03-14

我每晚通过詹金斯进行测试。大约95%的时间都是这样。但偶尔它会失败:

driver.findElement(By.xpath("//div[contains(@id, 'stage')]/div[contains(@class, 'tabMenu')]/span[contains(@class, 'menuItem') and contains(text(),'Employer')]"))

使用org.openqa.selenium.InvalidSelectoreXception。注意:这几乎总是有效的。

 //div[contains(@id, 'stage')]/div[contains(@class, 'tabMenu')]/span[contains(@class, 'menuItem') and contains(text(),'Employer')]

它会发现并突出它。当我从调试外壳执行

 driver.findElement(By.xpath("//div[contains(@id, 'stage')]/div[contains(@class, 'tabMenu')]/span[contains(@class, 'menuItem') and contains(text(),'Employer')]"))

我明白

 org.openqa.selenium.InvalidSelectorException:Unable to locate an element ... because of the following error:
 [object Error] (WARNING: The server did not provide any stacktrace information)

所以我想我应该得到所有的div并得到他们的ID:

 driver.findElement(By.xpath("//div"))

我得到了

 org.openqa.selenium.InvalidSelectorException: Unable to locate an element with the xpath expression //div because of the following error:
[object Error] (WARNING: The server did not provide any stacktrace information)

所以好吧。我尝试driver.findelement(by.xpath(“//*”))并仍然得到InvalidSelectorException

因此“//*”必须查找元素。即使它没有,它不应该返回类似于NoSuchElementException rathe的东西而不是InvalidSelectoRexCeption吗?有人知道发生了什么吗?我搜索了InvalidSelectorException的含义,找到了用法,但没有找到定义

所以我想我有两个问题:1。为什么没有找到任何元素(甚至是“//*”),和2。它不应该返回NoSuchElementException,而不是InvalidSelectoRexMaple吗?

共有1个答案

秦珂
2023-03-14

InvalidSelectoreXceptionNoSuchelementException是完全不同的异常。

  • NoSuchelementException
    当使用的定位器策略正确,但在页面的DOM中找不到与之匹配的元素时,会引发此问题。
  • InvalidSelectoreXception
    当正在使用的定位器字符串无效时,会引发此问题。在Selenium java实现中,有几个示例应该抛出此异常:
    • testshouldthrowinvalidselectorexceptionwhenxpathissyntacticallyinvalidindriverfindelement
    • testshouldthrowinvalidselectorexceptionwhenxpathreturnswolltypeindriverfindelement

    如您所见,当XPath无效时会引发此异常。

    为什么您可能获得InvalidSelectoreXception

    您提到在IE上运行测试,但是IE浏览器没有用于查找元素的本地xpath引擎。因此,为了能够在IE中通过xpath查找元素,驱动程序必须使用JavaScript xpath查询引擎。

    • 您已经使用了ES和IDS,所以您不妨尝试将选择器策略更改为CSS选择器。至少对于失败的元素
    • 尝试更新XPath的选择器,使其不那么复杂(如果可能的话)
    • 切换到一个更现代的浏览器:Chrome、Firefox、Edge,如果可能的话(不过我怀疑是否有人使用IE是出于纯粹的选择)

 类似资料:
  • 问题内容: 如何检查一个变量,如果是或,是什么之间的差异和? 和之间有什么区别(很难在Google上搜索“ ===”)? 问题答案: 如何检查一个变量,如果它还是… 是变量: …但请注意,如果is ,则后者也适用。 它是: …但是再次,请注意,最后一个是模糊的;如果是的话,也是正确的。 现在,尽管有上述情况, 检查这些内容的 通常 方法是使用它们是 假 的事实: 这由规范中的ToBoolean定义

  • 问题内容: 很快就有两个相等运算符:double equals( )和Triple equals( ),两者之间有什么区别? 问题答案: 简而言之: 操作员检查其实例值是否相等, 操作员检查引用是否指向同一实例, 长答案: 类是引用类型,可能有多个常量和变量在幕后引用类的同一单个实例。类引用保留在运行时堆栈(RTS)中,其实例保留在内存的堆区域中。当您控制平等时, 这意味着它们的实例是否彼此相等。

  • 我试图了解Excel中DATEDIF(date1, date2,"d")和DATEDIF(date1, date2,"yd")之间的区别。在尝试处理闰年日期时非常混乱。 例如 < code > = DATEDIF(" 2020年2月29日"、" 2021年3月1日"、" yd")给出< code>0。 但是当我试图给予 给出。 还有一件事是 给出 29 和 给出28。 一些文章声称开始日期的年份用

  • 我编写了一个简单的脚本,它接受任意数量的参数来演示< code>$@和< code>$*之间的区别: 在我做的 CLI 上 这就是打印出来的 因为它们是相同的,这是否意味着等于?还是我遗漏了一点?

  • 本文向大家介绍成本差异和进度差异之间的差异,包括了成本差异和进度差异之间的差异的使用技巧和注意事项,需要的朋友参考一下 对于任何应用程序或专门用于任何项目,最关注的因素之一是在开发前和开发后阶段的预算管理和时间管理。因此,要评估任何项目的这两个主要因素,有很多方法,其中成本差异和进度差异是两个重要且主要的方法。 顾名思义,“成本差异”基于项目开发中花费的成本,而“进度差异”则基于相同开发中花费的时

  • 问题内容: package main 该代码可以很好地工作。但是,如果按如下所示更改方法,则会导致死循环。区别在于将替换为。为什么? 问题答案: 因为程序包检查要打印的值是否具有方法(或换句话说:是否实现接口),如果是,则将调用它以获取值的表示形式。 软件包doc中对此进行了说明: […]如果操作数实现String()字符串方法,则将调用该方法将对象转换为字符串,然后根据动词的要求对其进行格式化(