【问题标题】:Selenium WebDriver C# not find element by FindElement(by.xpath)Selenium WebDriver C# 通过 FindElement(by.xpath) 找不到元素
【发布时间】:2015-10-08 08:25:53
【问题描述】:

我正在尝试在下表中查找元素 <td>!!mmm region test !!mmm region test</td>

...
<div class="panel-body cim-padding-zero">
   <div class="row">
      <div class="col-md-12">
         <section id="UserListArea">
            <div class="jtable-main-container">
               ...
<table class="jtable">
    ...
    <tbody>
        <tr class="jtable-data-row jtable-row-even Pointer" data-record-key="88">
            <td></td>
        </tr>
        <tr class="jtable-data-row Pointer" data-record-key="301">
            <td></td>
        </tr>
        <tr class="jtable-data-row jtable-row-even Pointer" data-record-key="302">
            <td></td>
        </tr>
        <tr class="jtable-data-row Pointer" data-record-key="524">
            <td></td>
        </tr>
        <tr class="jtable-data-row jtable-row-even Pointer jtable-row-selected" data-record-key="651">
            <td>!!mmm region test !!mmm region test</td>
        </tr>
        ...
    </tbody>
</table>        
...

我试过了

IWebElement UserList = driver.FindElement(By.XPath("//section[@id='UserListArea']/div/table/tbody/tr[5]/td"));

还有这个

IWebElement UserList = driver.FindElement(By.XPath("//*[@id='UserListArea']/div/table/tbody/tr[5]/td"));

但在每种情况下我都会收到错误

OpenQA.Selenium.NoSuchElementException:无法定位元素: {"method":"xpath","selector":"//section[@id='UserListArea']/div/table/tbody/tr[5]/td"}

【问题讨论】:

  • 您能否更好地格式化您的 HTML?不要将所有内容都放在 1 行中。

标签: c# selenium xpath selenium-webdriver


【解决方案1】:

请下次更正确地编辑您的 HTML。读起来很不舒服

//tr[@data-record-key="651"]/td

这对我有用

【讨论】:

  • 德米特里,保持冷静。我不能提供链接,因为网页的信息有限。如果您愿意,我可以发送 .htm 或 .html 文件,但在此文件中我们无法探索元素。为了说明网页,我可以分享屏幕:prntscr.com/8p2ibw(红框是我在 WebDriver 中找不到的记录示例)。
  • 认为 XML 绝对正确。也许 webdiver 在它还没有准备好的时候试图找到这个元素?尝试使用 Thread.sleep(1500); (1500 毫秒)在访问这个元素之前,也许它会起作用
  • 德米特里,经过一天的努力,我成功了。使用 Thread.sleep 就够了。在网站上,我看不到该元素仍在加载,但它们确实必须如此。感谢您的耐心等待!
  • 没问题,很高兴我能帮上忙。
  • 请不要使用Thread.sleep()。使用WebDriverWait 并等待特定元素存在是一种更好的做法。这是一种不那么脆弱的等待方式。
【解决方案2】:

你可以在Xpath下面试试:-

//*[@id='UserListArea']/div/table/tbody/tr[5]/td[contains(.,'!!mmm region test !!mmm region test')]

//*[@id='UserListArea']//tr[@data-record-key='651']/td

//tr[@class='jtable-data-row jtable-row-even Pointer jtable-row-selected']/td

如果硒仍然显示NoSuchElementException,则检查是否存在任何帧。如果有框架,则需要先切换到框架

【讨论】:

  • 对不起,其中任何一个都不起作用。在我的网页中不是框架阶段。你还有别的想法吗?您需要我的页面的更多 html 吗?
  • 是的,它会有所帮助。如果你能分享链接那就更好了
  • 我在第一篇文章中编辑了html代码,并给出了更多的html代码,但当然我必须删除一些受限信息。
  • 我又添加了一个 xpath。希望对你有帮助
  • 还是不行。此外 3 xpath 不清楚,因为这个 xpath 不表示 tr[5] 而是整个 tr。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-19
  • 2021-05-11
  • 1970-01-01
  • 2014-11-12
  • 2013-12-21
  • 2023-03-22
相关资源
最近更新 更多