【问题标题】:Unable to locate element: {"method":"css selector","selector":"#id_gender1"}无法定位元素:{"method":"css selector","selector":"#id_gender1"}
【发布时间】:2019-07-24 15:31:36
【问题描述】:

我正在尝试通过我能想到的所有可能方式来选择一个复选框/单选按钮,但它们都没有奏效。

这是我试图识别复选框的方式

WebElement selectGender = driver.findElement(By.id("id_gender1"));
selectGender.click();

这是 HTML 代码

<div class="radio-inline">
    <label for="id_gender1" class="top">
     <div class="radio" id="uniform-id_gender1"><span class="checked"><input type="radio" name="id_gender" id="id_gender1" value="1">
     </span>
     </div>
       Mr.
   </label>
</div>

这是我收到的错误消息。

org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {"method":"css selector","selector":"#id_gender1"}
  (Session info: chrome=75.0.3770.142)
For documentation on this error, please visit: https://www.seleniumhq.org/exceptions/no_such_element.html
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03'
System info: host: 'JEFFERSONPC', ip: '192.168.100.6', os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.8.0_211'
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities {acceptInsecureCerts: false, browserName: chrome, browserVersion: 75.0.3770.142, chrome: {chromedriverVersion: 75.0.3770.140 (2d9f97485c7b..., userDataDir: C:\Users\JEFFER~1\AppData\L...}, goog:chromeOptions: {debuggerAddress: localhost:63666}, 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: 65163859269265511fa3118a5c9b1f79
*** Element info: {Using=id, value=id_gender1}

【问题讨论】:

  • 您是否能够在 chrome 浏览器开发工具中使用相同的 css 定位元素?
  • 如果您需要有关如何在浏览器开发工具中使用 xpath 的帮助,请参阅 this

标签: java selenium webdriver


【解决方案1】:

诱导WebDriverWaitelementToBeClickable点击该元素。

尝试以下选项。

WebDriverWait wait = new WebDriverWait(driver, 30);
WebElement selectGender = wait.until(ExpectedConditions.elementToBeClickable(By.id("id_gender1")));
selectGender.click()

WebDriverWait wait = new WebDriverWait(driver, 30);
WebElement selectGender = wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//div[@class='radio-inline']/label[@for='id_gender1']")));
selectGender.click()

【讨论】:

    【解决方案2】:

    这是你的代码

      findElement(By.xpath("//input[@name='id_gender']")).click();
    

    【讨论】:

      【解决方案3】:

      --免责声明:由于缺乏声誉,目前无法发表评论--

      您获取 id 的代码看起来不错,而且代码中也没有拼写错误。但您的答案可能在这里找到:

      Unable to locate an Element By ID in Selenium

      另外:请更详细地发布您迄今为止尝试过的内容。你说的都是你知道的,但我们不知道那是什么:)。

      例如,参考您尝试过的与您的相似的 stackoverflow 答案

      【讨论】:

      • 感谢您的提醒,下次我一定会发布“我尝试过的所有方法”。
      【解决方案4】:

      您的代码运行良好。 为什么你的错误信息有 css Selector?当您不使用 cssSelector 时。

      如果使用 cssSelector 则: WebElement selectGender = driver.findElement(By.cssSelector("#id_gender1")); 选择性别.click();

      【讨论】:

      • 我发布问题时可能复制了错误的错误消息,无论如何感谢您的帮助,我在插入等待后让它工作。
      • 请将其添加为答案并将其标记为解决方案以供将来参考
      【解决方案5】:

      我确定您正在尝试单击框架内的元素。首先,您必须在该框架上切换驱动程序并执行您的测试脚本。

      driver123.switchTo().frame(<some frame index or id>;//Switching frame
      WebElement selectGender = driver.findElement(By.id("id_gender1"));//Storing element
      selectGender.click();//Clicking on element
      

      注意:如果您没有帧 ID 或索引,请使用 xpath 切换到该帧。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-11-25
        • 2017-12-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-08
        • 1970-01-01
        • 2020-03-18
        相关资源
        最近更新 更多