【问题标题】:FindElement by Name Fails but by Xpath Succeeds?FindElement by Name 失败但通过 Xpath 成功?
【发布时间】:2014-02-02 22:47:04
【问题描述】:

这对我来说没有任何意义。这是我尝试与之交互的页面元素的源代码:

<li>
    <input type="checkbox" name="includeStudents" value="true" checked />
     <span style="cursor: pointer;"
          onclick="javascript:checkBoxSingleClick(document.userSearchForm.includeStudents);"
          ondblclick="javascript:userTypeDoubleClick(document.userSearchForm, document.userSearchForm.includeStudents);">
     <strong><u>S</u>tudent</strong>
       </span>
 </li>

当我尝试使用 By.name 查找元素时 - 我得到一个元素不可见的错误,但是,当我尝试使用 By.xpath 查找相同的元素时 - 一切正常。这是我的测试代码。

wait.until(ExpectedConditions.visibilityOfElementLocated(By.name("includeStudents")));
    driver.findElement(By.name("includeStudents")).click();
    //driver.findElement(By.xpath("//*[@id='ed-userSearchCheckboxUserTypeFilter']/li[2]/input")).click();

我添加了等待以确认这不仅仅是时间问题。使用 by.name 时出现等待元素可见性的超时错误

我在这里缺少什么?

【问题讨论】:

  • 您确定这是页面上唯一具有此名称的元素吗?您可以尝试执行以下操作以获得更合适的细节吗?
  • driver.findElement(By.id("ed-userSearchCheckboxUserTypeFilter")).findElement(By.name("includeStudents")).click();
  • 有趣 - 我试过你的线路并且它有效 - TY。我现在很好奇-根据您的第一条评论,我假设认为还有另一个元素使用该名称(这也是我最初的想法)。但是在页面源代码上搜索并没有出现。此外,“等待”超时表明(对我而言)没有找到具有该名称的元素 - 即使页面已完全加载
  • 这很奇怪。因为是的,我的想法确实是这样。您总是可以在该定位器上执行 findElements() 并对其进行计数,但不确定
  • 元素是否存在问题。
  • 您可以随时在 freenode (IRC) 上加入 #selenium,并尝试从那边的人那里得到更好的答案。
  • 标签: selenium-webdriver junit4


    【解决方案1】:

    我可能完全不在此处,但是您是否检查过该元素是否不在 webdrivers 实例的父级中?例如,如果您的代码位于您尚未进入的框架内,那么它将无法定位 Xpath。它将抛出一个错误,即不存在任何元素并且 webdriver 在 x 秒后超时。

    driver.switchTo().frame("MyElementFrame");    
    driver.findElement(By.xpath("//*[@id='ed-userSearchCheckboxUserTypeFilter']/li[2]/input")).click();
    

    【讨论】:

      猜你喜欢
      相关资源
      最近更新 更多
      热门标签