【问题标题】:Selenium check if attribute contains part of a string in javaSelenium检查属性是否包含java中字符串的一部分
【发布时间】:2017-02-06 16:16:02
【问题描述】:

所以我有一个网页,其中某些元素的 ID 是动态生成的,某些部分会发生变化,某些部分会保持不变,如下所示:

<div id= "xxxdiv" title= 'this title'>
  <p id = "xxxp">
  <table id = "xxxtable" title = 'not derp'>
         <div id = "yyyydiv">
           <table id = "yyytable" title= 'derp'>
             <table id = "yyytable2" title = 'not derp'>
               <table id = "zzztable" title = derp>

我正在尝试在页面上进行一些动态查找,以查找 id 包含已知值的给定元素。例如,我并不总是知道可能存在多少嵌套元素,因此最终生成的数量可能会有所不同。所以我想通过xpath找到一个元素,其中@title = not derp并且@id包含yyy。我怎样才能做到这一点?

【问题讨论】:

  • 您只想要表格或任何符合您条件的元素吗?

标签: java selenium dom xpath


【解决方案1】:

我想通过 xpath 找到一个元素,其中 @title = not derp 并且 @id 包含 yyy

我建议你改用cssSelector,因为使用By.cssSelector() 定位元素在性能上比By.xpath() 快得多。所以你应该尝试如下:-

driver.findElement(By.cssSelector("table[id *= 'yyy'][title = 'not derp']"));

【讨论】:

  • CSS 选择器比 xpath 快?这种说法有证据吗?
【解决方案2】:
driver.findElement(By.xpath("//table[@title='not derp' and contains(@id, 'yyy')]"));

将找到与您的搜索条件匹配的第一个元素,即 HTML sn-p 的 &lt;table id = "yyytable2" title = 'not derp'&gt;

【讨论】:

  • 从技术上讲,这会找到第一个 TABLE 元素......而不仅仅是第一个元素。取决于OP想要什么。它可以很容易地切换到"//*[@title..." 以使其通用。
  • @JeffC 没错,我编辑了答案以便澄清。
  • 谢谢。这很有帮助
  • 我不确定 contains(@id, 'yyy') 是查找包含匹配 id 的元素还是查找包含所提供文本的 id。
【解决方案3】:

您可以使用大量的关系和逻辑运算符。在这种情况下,假设您正在寻找表格元素,您可以使用://table[@title='not derp' and contains(@id,'yyyy')]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-19
    • 2015-08-02
    • 2015-08-29
    • 1970-01-01
    • 1970-01-01
    • 2019-06-27
    • 2019-08-05
    • 1970-01-01
    相关资源
    最近更新 更多