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

我使用id作为标识符来查找元素,但异常堆栈跟踪显示css选择器[duplicate]

谢灵均
2023-03-14

我正在使用SeleniumWeb驱动程序和Java代码。无论何时组织。openqa。硒。NoTouchElementException发生,堆栈跟踪每次都将标识符方法打印为css选择器,尽管我使用id查找web元素。

我尝试使用xpathidentifier,它用正确的identifier方法打印出完美的堆栈跟踪。我的示例代码。

public void testMethod()
{
    try
    {
        driver.findElement(By.id("test"));
    }
    catch (Exception ex)
    {
        ex.printStackTrace();
    }
}

堆栈跟踪输出:

org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {"method":"css selector","selector":"#test"}
  (Session info: chrome=75.0.3770.100)
For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html
Build info: version: '3.14.0', revision: 'aacccce0', time: '2018-08-02T20:19:58.91Z'
System info: host: 'DTB150', ip: '10.37.55.150', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_181'
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities {acceptInsecureCerts: false, browserName: chrome, browserVersion: 75.0.3770.100, chrome: {chromedriverVersion: 75.0.3770.90 (a6dcaf7e3ec6f..., userDataDir: C:\Users\DEV~1.SOL\AppData\...}, goog:chromeOptions: {debuggerAddress: localhost:38152}, javascriptEnabled: true, networkConnectionEnabled: false, pageLoadStrategy: normal, platform: XP, platformName: XP, proxy: Proxy(), setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior: dismiss and notify}
Session ID: b6c8f6cd722e746281dd59657850e10f
*** Element info: {Using=id, value=test}

异常的第一行中的Check方法。它说method:css选择器,尽管我使用id查找元素。

这是某种错误还是我误解了代码中的某些内容或问题?

共有1个答案

郎经纶
2023-03-14

请参见异常:无法定位元素:{"method":"css selector","selector":"#test"}

在css中,选择器#表示一个id。

如果id为test,并且您正在这样使用它:

driver.findElement(By.id("test"));

如果未找到,则异常应与id相关。

但是如果你像这样使用它

driver.findElement(By.cssSelector("#test"));

您将得到与上面在OP中提到的相同的异常。

 类似资料:
  • 问题内容: 有什么方法可以将堆栈跟踪作为字符串获取? 查看调试包(https://golang.org/pkg/runtime/debug/),它只能打印到标准输出。 问题答案: 将格式化的堆栈跟踪放到提供的中。然后,您可以将其转换为字符串。 您还可以使用,分配足够大的缓冲区来容纳整个堆栈跟踪,并使用将该跟踪放入其中,并返回缓冲区()。

  • 问题内容: 如何将异常的堆栈跟踪信息打印到stderr以外的流上?我发现的一种方法是使用getStackTrace()并将整个列表打印到流中。 问题答案: 可以接受or或参数: 也就是说,请考虑将SLF4J之类的记录器接口与LOGBack或log4j之类的记录实现一起使用。

  • 这可能在JUnit文档中已经很明显了,但似乎找不到它,也不记得是否有我将要描述的解决方案。 然后我们得到这个: 现在我得到了一些几乎没用的东西。但是,我希望看到完整的enchilada,整个堆栈跟踪。但是我似乎没有找到使用JUnit这样做的方法,除了在catch/try块中添加测试用例以将堆栈跟踪打印到标准错误(难看): 我讨厌这样做,因为它污染了(IMO)我的测试用例逻辑;而且它是手动的,我必须

  • 如你所见,这些都是堆栈微量元素。我只希望打印带有蓝色字体的黄色部分(可单击以标识抛出异常的java类及其行号),因为其余的堆栈跟踪都是多余的。 我使用以下方法显示了这些堆栈跟踪:

  • 我使用以下代码打印try-catch块中发生的任何异常,但是当异常发生时,logback不会打印完整的堆栈跟踪,而是写入一行错误(它没有明确说明是什么导致了它。我如何在logback输出中打印完整的堆栈跟踪? 尝试捕获异常的catch块 日志返回错误输出:

  • 问题 你想使用类似于CSS或jQuery的语法来查找和操作元素。 方法 可以使用Element.select(String selector) 和Elements.select(String selector) 方法实现: File input = new File("/tmp/input.html"); Document doc = Jsoup.parse(input, "UTF-8", "ht