【问题标题】:Selenium webdriver find texy by first digitsSelenium webdriver 按第一个数字查找文本
【发布时间】:2015-11-27 13:47:52
【问题描述】:

我在寻找具有特定、未知 ID 的元素时遇到问题。我只知道它将从实际日期开始,例如今天是'201511276745476574865746375d'。 (最后总是一封信)

在 SQL 中,我会通过写“20151127%”找到它,但它在 Selenium webdriver 中不起作用:(

编辑: 我用java,我需要点击按钮,里面有代码:

<input name="removeCatalog" id="20151130081807817d" class="buttons buttonShort alignCenter" value="Delete" onclick="removeCatalogFromCatalogList('20151130081807817','Do you want to remove it?')" type="submit">

我尝试使用 SQL 代码查找 id,但我意识到 webdriver 并不总是与数据库连接(我不能那样做)。

我试图找到带有“Catalog selenium”关键字的行,但没有工作: driver.findElement(By.xpath("//table[@id='GridView']/tbody/tr[td[text() ='catalog selenium']]/td[8]/input")).click();

【问题讨论】:

  • 您使用什么硒语言绑定? (需要为您提供更强大的解决方案,明天或其他任何一天也可以使用)
  • 您尝试了哪些方法,结果如何?就像你在学校做的那样……请展示你的作品。 :) 这是在 SO 上回答问题的过程的一部分。它对您很有帮助,因为它迫使您调查自己的问题并仔细考虑。它还向读者证明你做了功课,并做出了合理的尝试来回答你自己的问题。第三,它可以帮助读者发现和诊断问题,从而为您提供更好的答案,减少我们浪费的时间。
  • 我终于可以上网了。好吧,我认为这不值得展示——它是一个更大项目的一部分,我的问题和它一样严格(这是一张包含用户制作的文档的表格,我想删除一个特定的已知文件)。我尝试连接 SQL 数据库以查找日志,但我意识到我并不总是有连接数据库的可能性,所以我试图找到不同的方式。我最后一次尝试是:
  • 糟糕,无法编辑 - 使用 SQL 行,因此完全不同。我正在搜索这个网站以找到提示,但我找不到它:(

标签: java selenium webdriver


【解决方案1】:

由于我不确定您使用的是哪种编程语言,我将继续使用 C#。 如果您确定您的 ID 是从当天开始的,那么您可以有一个通用的解决方案:

driver.FindElement(By.Xpath(".//*[starts-with(@id, '" + System.DateTime.Now.ToString("yyyyMMdd") + "')]"));

【讨论】:

  • 我用的是java,但几乎是一样的:)我试试看,谢谢建议
  • 如果最后的字母“d”很重要怎么办?我将其更改为 driver.findElement(By.xpath("//*[contains(@id, " + year.format(new Date())+ month.format(new Date())+ day.format(new Date()) + ")]")); 并且可以正常工作。我试过:driver.findElement(By.xpath("//*[contains(@id, " + year.format(new Date())+ month.format(new Date())+ day.format(new Date()) + "d)]")); 或类似的方式(包括“包含 && “d””)但不工作:/
  • 您可以拥有这样的 xPath:driver.FindElement(By.Xpath(".//*[starts-with(@id, '" + System.DateTime.Now.ToString("yyyyMMdd") + "') and contains(@id, 'd')]"));
  • 顺便问一下,有yyyyMMdd 的格式,但是如果我有yyyyMMddHHMMrrrrrrrd,其中r 是随机数字而d 是强制性的呢?是否有可能让硒找到它?
  • 是的,最后一部分and contains(@id, 'd') 使这成为可能。这会强制 webdriver 查找其id 包含字母d 的元素。而且由于您的 id 仅包含数字(以日期和/或时间和随机数字的形式)且仅包含一个字母,因此您应该没有任何问题。
【解决方案2】:

要查找具有以 20151127 开头的 id 属性的元素,可以使用以下 XPath:

//*[starts-with(@id, '20151127')]

我建议使用实际的标签名称(div、td 等)代替示例中给出的星号。

【讨论】:

    【解决方案3】:

    你可以试试

    driver.find_elements_by_xpath("//*[contains(text(), '20151127')]")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-02-02
      • 1970-01-01
      • 2012-04-22
      • 2016-04-26
      • 1970-01-01
      • 2017-10-27
      • 1970-01-01
      相关资源
      最近更新 更多