【问题标题】:Finding a complex span:not(p) selector for selenium webdriver为 selenium webdriver 找到一个复杂的 span:not(p) 选择器
【发布时间】:2014-04-29 15:37:36
【问题描述】:

我有一个带有一些 id 的 span;在该范围内,既有段落 p 标签,也有一些没有标签的文本,如下所示。我正在使用 selenium webdriver 来定位下面的街道地址。

 <span id="myspan">
    <p>fullname</p>
    street address - has no tags attributes.
 </span>

我只需要定位没有全名的街道地址。

我在想这样的事情:

span#myspan.not(p) // select all content of the span element, then ignore the p 
tag within it, so that only the street address is left. 

//

driver.findelement(By.cssSelector("span#myspan.not(p)")) // should select street 
address

再次感谢您的帮助。

【问题讨论】:

  • 据我所知,CSS 无法做到这一点……看看this。但是,使用 jQuery,您可以尝试 $("#myspan").contents(":not(p)").text(); 之类的东西。 (编辑: 好像只适用于某些版本的 jQuery。)
  • 感谢 seiseises,看来这里唯一的方法是使用你所说的在 selenium webdriver 中的 javascriptExecutor。但如果不是在 css 中,那么使用 xpath 怎么样?有没有办法使用 xpath 完成上述问题?再次感谢
  • 抱歉,没用过 selenium 或 xpath,我只是看到了 jQuery 标签并试了一下。希望其他人可以帮助你!
  • 没关系,尽管下面的 Amith 为我提供了我正在寻找的确切解决方案,但我将在 Selenium 选择器不够用的困难情况下使用 Javascript。例如,使用 JavascriptExecutor(jqueryScript) 在 Java 中运行 javascript/jquery 代码。所以这仍然很有帮助,谢谢。

标签: java html jquery-selectors selenium-webdriver css-selectors


【解决方案1】:

好吧,据我所知,没有选择器或 xpath 可以直接执行此操作。但是,如果您使用的是 java,则以下内容应为您提供所需的文本:

String spanText = driver.findElement(By.cssSelector("span#myspan")).getText();
String pText = driver.findElement(By.cssSelector("span#myspan > p")).getText();
String requiredText = spanText.replace(pText,"");

第一个语句应该得到fullname street address,第二个得到fullname,第三个语句返回street address

如果你想删除前导和尾随空格,以下应该可以工作:

System.out.println(requiredText.trim());

【讨论】:

  • 你是阿米特人,再次非常感谢,它成功了!还要感谢 seiseises。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-09
  • 2017-11-10
相关资源
最近更新 更多