【问题标题】:Hidden XPATH to find element of text? Ruby-selenium隐藏 XPATH 来查找文本元素?红宝石硒
【发布时间】:2013-09-10 07:44:28
【问题描述】:

我正在尝试查找下面元素的 xpath,以便以后可以使用 Ruby Selenium-webdriver 获取文本(即helloPage.mainHeader.get_text)。

<div class="container">
  <div class="template-section">
    <div class="front">
      <h3 class="containerHeading">
      <i class="icon_image"></i>
      "Hello world   <-----------------------3 whitespaces
      "
      </h3>
    </div>
   </div>
</div>

我在 xpaths 上工作过,但每次我重新运行测试时它都会超时,基本上该元素不存在。它在 UI 上清晰可见,没有隐藏。

为什么我的 xpath 是错误的?我尝试了以下方法:

  1. //div[@class='container']//div[@class='template-section']//div[@class='front']//h3[@class='containerHeading']
  2. //div[@class='front']//h3[@class='containerHeading']
  3. //h3[@class='containerHeading']

我确实在执行helloPage.mainHeader.get_text 之前设置了睡眠,其中mainHeader 具有XPath 表达式,但这不起作用。 Hello World 文本有什么神秘之处吗?格式确实和我打出来的一样。

【问题讨论】:

  • 查看您提供的xpaths,它们都是有效的。但是,对于“A”,您可以将其重写为 //div[@class='container']/div[@class='template-section']/div[@class='front']/h3[@class='containerHeading'],请注意分隔元素的单个前斜线。那么,当您尝试查找元素时,您是否看到错误或异常?您是否使用其他工具来检查您的xpath 是否也有效?
  • 使用 Firefox 和 firepath 来测试你的 xpath。另外,作为一个实验,将 [@class='foo'] 更改为 [contains(@class, 'foo')]。
  • @Mark Rowlands - 是的,当我使用您提供的 xpath 时出现错误。相反,我将其更改为: //div[@class='container']//div[@class='template-section']/div[@class='front']/h3‌​[@class='containerHeading '] ,那么它是一个有效的 xpath。请注意,模板部分上有 // 当我尝试获取文本时,xpath 的值返回空白。
  • @RobbieWareham - 是的,我一直在使用 Chrome 扩展程序(xPath Viewer 和 XPath Helper)进行检查。作为一个实验,我确实尝试过: //div[contains(@class, 'container')]/div[contains(@class,'template-section')]/div[contains(@class, 'front')]/ h3[contains(@class, 'containerHeading')] 结果,我仍然没有得到任何返回文本
  • 你必须包括双前斜线?奇怪的。该符号表示“找到以下任何一项”。所以你实际上是在说“给我找到任何带有'container'类的div,然后找到任何带有'template-section'类的div,然后在里面找到任何带有'front'类的div ... ETC”。也许这是Ruby的事情?对不起,我是 Python 用户。如前所述,您是否尝试过任何工具来帮助验证/构建您的“xpath”?您想在“iframe”中与之交互的“元素”可能是什么?

标签: ruby xpath selenium selenium-webdriver


【解决方案1】:

您的所有 xpath 对我来说似乎都是正确的...我认为当您尝试使用 xpath 查找元素时...元素未正确加载...尝试使用显式等待。请尝试使用下面提供的代码:

等待 = Selenium::WebDriver::Wait.new(:timeout => 10) wait.until { driver.find_elements(:xpath, "你上面提到的任何 xpaths") }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-21
    • 1970-01-01
    • 1970-01-01
    • 2011-02-08
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 2016-04-01
    相关资源
    最近更新 更多