【问题标题】:Selenium WebDriver wicket FindElement challengesSelenium WebDriver 检票口 FindElement 挑战
【发布时间】:2023-03-11 22:07:01
【问题描述】:

我是 Selenium WebDriver 的新手,但我主要使用基于 Java/Wicket 的应用程序。不幸的是,我一直在搞清楚如何识别 Wicket 框架提供的页面导航控件集合。控件如下所示:

>>

使用 Firebug,我可以看到包含动态 id 的 href 字符串,并且元素未命名,因此我进退两难。

任何建议将不胜感激。

【问题讨论】:

  • 请发布代码示例
  • Firebug 的一个方便工具是 Firepath,它可以帮助您在屏幕上找到可以在 selenium 测试用例中使用的项目的 Xpath。您还可以在 Java 项目中添加 Selenium 标签,这样 div id 将保持不变。
  • 附录:我还研究了一个笨拙的场景,即可能使用 Tab 键来访问所需的元素/控件。所需的元素/控件不包含在 Tab 键顺序中。
  • 请张贴实际的 HTML。解释它们的“动态”,解释它们的“标准”/“静态”。说明您正在测试的浏览器版本。说明到目前为止您尝试过的方法、它们如何不起作用、为什么不起作用以及出现了哪些错误(如果有的话)。

标签: java selenium webdriver wicket


【解决方案1】:

Firebug 有一个名为 FirePath 的插件,它允许用户通过 Xpath 查找元素。它还允许用户在 XPath 中查找元素。 Xpath 可用于您的 Selenium 测试类。

您还可以使用 Selenium 标签将 Div id 添加到 Java 中的元素。然后在您的 Selenium 测试用例中使用 Div id。

以下是通过 Xpath 点击元素的示例。

driver.findElement(By.xpath("//span/a[@title='San Jose Sharks']")).click();

【讨论】:

  • FirePath 看起来很有趣。但是,我们的 IT 部门安全部门似乎在某种程度上阻止了最初的安装尝试。仍在解决问题。感谢您的意见。
  • 进展。安装了 FirePath。不清楚如何访问。在线指导似乎过时了,即描述了我看不到的 UI 选项。有什么入门的 URL 建议吗?
  • +1 建议使用 Xpath。我发现需要 xpath 表达式来查找 Wicket 生成的大量 html 组件,通常是在它们具有动态 id 时。我没有使用过 FirePath,但我发现使用 Firebug 检查 HTML 通常可以帮助我构建所需的 Xpath 表达式来定位元素。
  • 我刚刚安装了 FirePath。它可以从 Firebug 面板访问。只需导航到您的页面,启动 Firebug,您应该会看到 Firepath 菜单已添加到 Firebug 面板中。
  • 好的。我的操作员错误加上配置 fubar。我犯了让 Firefox 更新到 V24 的错误。现在刚刚回到工作状态并让 FirePath 工作。需要了解其工作原理,然后才能进行 Xpath 场景测试。
【解决方案2】:

你说它们是元素?那应该比较容易。

int pageNum = 1;//Or whatever number you want to click on
driver.findElement(By.linkText(pageNum+""));

如果有其他包含数字的链接(很有可能),你可以选择一个父元素:

driver.findElement(By.cssSelector(".pageNumSet")).findElement(By.linkText(pageNum+""));

(显然.pageNumSet 选择器必须更改。

(顺便说一句,我不推荐 XPath,除非你绝对必须使用它。它是所有选择器中最强大的,但也是最慢的。(生成的 XPath 也可能非常脆弱)

【讨论】:

    【解决方案3】:

    标准检票口 ID 随每个页面呈现而变化,因此您无法使用它们。但是,您可以指示 wicket 为每个元素添加一个 wicketpath 属性(在适当的情况下 - 可能只是链接/按钮?),然后告诉 Selenium 使用 wicketpath 而不是 wicket id: http://www.jdev.it/testing-a-wicket-application-with-selenium-ide/

    Wicket 只会在调试模式下添加 'wicketpath' 元素,因此您的生产网站不会因为没有它们而损失任何性能。

    【讨论】:

      【解决方案4】:

      我在使用 wicket 时遇到了完全相同的问题。页面更改块受到不断变化的 id 的“保护”,表单中隐藏的输入字段,href 中的jsessionid=BcxrRceaycMF3I0ZgL5lMfHg_tEQ2mIS6IS71m69,如果您不从您的无头浏览器和所有其他幼儿园的愚蠢行为。

      这个特殊情况的解决方案(因为我有完全一样的,这是一个活生生的例子):

      from selenium import webdriver
      
      options = webdriver.ChromeOptions()
      # options.add_argument('headless')
      options.add_argument('window-size=1920x1080')
      options.binary_location = '/usr/bin/google-chrome'
      
      browser = webdriver.Chrome(executable_path='/opt/google/chrome/chromedriver',
                                 chrome_options=options)
      
      browser.get('https://webapps1.chicago.gov/activegcWeb/')
      
      page_link = browser.find_element_by_link_text('2') # or any other
      page_link.click()
      

      使用它,您可以抓取此分页菜单中的所有页面(并使用“>”进一步移动)。这个技巧很有效,因为“2”是链接的完整文本;很难想象你的页面上会有另一个这样的链接(除了上下分页菜单)。

      有一个变体driver.find_element_by_partial_link_text() 方法。当然,其余的都在这里用例子来解释:

      https://selenium-python.readthedocs.io/locating-elements.html

      享受吧! :)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-17
        • 1970-01-01
        相关资源
        最近更新 更多