【问题标题】:Unable to locate element using selenium webdriver even when the element id exists即使元素 id 存在,也无法使用 selenium webdriver 定位元素
【发布时间】:2018-10-18 15:05:12
【问题描述】:

请参考截图。我正在尝试单击“取消”按钮,如我的屏幕截图所示。即使元素的 ID 存在,我也无法单击该按钮。弹出窗口既不是一个新窗口,对我来说也不是一个警报。我试图搜索是否是窗口句柄的问题。但是当我搜索窗口句柄时它只给了我一个数字:

 Set<String> handles = driver.getWindowHandles();
 System.out.println(handles);

请建议..

收到错误信息 -

线程 "main" org.openqa.selenium.NoSuchElementException 中的异常:没有这样的元素:无法找到元素:{"method":"id","selector":"ctl00_ContentPlaceHolder1_g_64d6331f_e460_4a48_890f_b7d7257093d9_ctl00_rtbComments"} (会话信息:chrome=65.0.3325.181) (驱动程序信息:chromedriver=2.34.522940 (1a76f96f66e3ca7b8e57d503b4dd3bccfba87af1),platform=Windows NT 6.1.7601 SP1 x86_64)(警告:服务器未提供任何堆栈跟踪信息) 命令持续时间或超时:0 毫秒

【问题讨论】:

  • 也许您要查找的元素在某个 iframe 中,请确保在执行任何操作之前切换到成名。
  • 您的错误消息中的 ID 与 DOM 中的内容不匹配。 ctl00_ContentPlaceHolder1_g_64d6331f_e460_4a48_890f_b7d7257093d9_ctl00_rtbComments 来自错误消息,但是您在屏幕截图中突出显示的内容以 _rbCancel_input 结尾...为什么您不能仅通过按钮的 ID 找到?
  • 你能发布你的代码吗?
  • 抱歉,我的截图中显示的代码不正确。应该是:driver.findElement(By.id("ctl00_ContentPlaceHolder1_g_64d6331f_e460_4a48_890f_b7d7257093d9_ctl00_rbCancel_input")).click();
  • 你不应该使用有数字的属性值(它可以改变),尝试使用类名

标签: selenium selenium-webdriver selenium-chromedriver


【解决方案1】:

您尝试获取的 ID 实际上并不存在。这是因为每次浏览器创建按钮时,id 都会动态变化,无论是在您第一次访问它时还是在其他操作(如 javascript)时。

您可以使用属性和 XPath 来获取取消按钮,因为它是静态的,不会在会话之间更改。

C# 代码

FindElement(By.XPath("//input[contains(@value, 'Cancel')]"));

【讨论】:

    【解决方案2】:

    我猜 id 值是动态变化的。 试试这个定位器

     By.CssSelector("input[value='Cancel']");
    

    【讨论】:

      猜你喜欢
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 2016-04-15
      • 1970-01-01
      • 2020-01-09
      • 2020-05-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多