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

Posted

技术标签:

【中文标题】我使用 id 作为标识符来查找元素,但异常堆栈跟踪显示 css 选择器 [重复]【英文标题】:I'm using id as identifier to find element, but exception stack trace is showing css selector [duplicate] 【发布时间】:2019-11-13 05:50:04 【问题描述】:

我正在使用带有 Java 代码的 Selenium Web 驱动程序。每当发生 org.openqa.selenium.NoSuchElementException 时,堆栈跟踪每次都会将标识符方法打印为css selector,尽管我使用id 来查找网络元素。

我尝试使用xpath 标识符,它使用正确的标识符方法打印完美的堆栈跟踪。我的示例代码。

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

检查异常第一行中的方法。它说method: css selector 虽然我使用id 来查找元素。

这是某种错误还是我误解了某些东西或我的代码有问题?

【问题讨论】:

也许 Selenium 正在将您的“按 Id”搜索策略转换为 CSS 选择器策略? 【参考方案1】:

查看异常Unable to locate element: "method":"css selector","selector":"#test"

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

如果 idtest 并且您正在这样使用它:

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

如果没有找到异常应该与id相关。

但是如果你像这样使用它

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

你会得到与上面在 OP 中提到的相同的异常。

【讨论】:

以上是关于我使用 id 作为标识符来查找元素,但异常堆栈跟踪显示 css 选择器 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用PhpStorm的Behat不显示异常的堆栈跟踪。

python中的堆栈跟踪和异常处理

Ruby 异常处理:反向堆栈跟踪顺序

在 Spring Boot 应用程序中防止自定义异常的堆栈跟踪日志记录

来自未处理异常的 C++ 堆栈跟踪?

如何记录 Python 3 异常,但没有其堆栈跟踪?