我还没有找到一种基于文本进行精确匹配的方法。
例如转换
//a[text()='Log Out']
。我知道您可以执行
css=a:contains('Log Out')
,但我想与文本完全匹配。我也知道我可以做,但是正在寻找CSS解决方案。 #1 楼
css=a[text='Log Out'] or a[innertext='Log Out']
您能试试这个吗?
或者,如果这样不起作用,并且由于速度太慢而您仍然不想使用xpath,则可以随时尝试:
link=Log Out
。那还是比xpath更好。编辑:如果要查找确切的字符串,则可以始终使用正则表达式,例如:
css=div:contains("^ab$")
只需将div替换为a即可。这将在其查找的任何文本div中仅找到AB。 OFC如果您有多个与文本AB的链接(这是一件坏事:P),那么它将找到所有链接。 :)
#2 楼
这是一些CSS选择器的好地方。http://net.tutsplus.com/tutorials/html-css-techniques/the-30-css-selectors-you-must-memorize /
认为这可能对关注此主题的人有用。
评论
很好的解释差异,感谢您的链接
– Peter M.-代表莫妮卡(Monica)
14-10-28在17:17
共享链接很容易出错。该链接的内容可能会更改。
–保罗
19年3月14日在11:16
#3 楼
对于那些希望选择Selenium CSS文本的人来说,此脚本可能会有所用。技巧是选择要查找的元素的父元素,然后搜索具有文本的子元素。
public static IWebElement FindByText(this IWebDriver driver, string text)
{
var list = driver.FindElement(By.CssSelector("#RiskAddressList"));
var element = ((IJavaScriptExecutor)driver).ExecuteScript(string.Format(" var x = $(arguments[0]).find(\":contains('{0}')\"); return x;", text), list);
return ((System.Collections.ObjectModel.ReadOnlyCollection<IWebElement>)element)[0];
}
如果有多个元素,则此元素将返回第一个元素,因为在我的情况下,它始终是一个元素。
评论
这似乎取决于可用于执行javascript的jQuery?
–大卫
15年1月22日在23:25
@David绝对是,但是应该可以用纯JavaScript重写它。
–马塔斯·维特凯维奇(Matas Vaitkevicius)
2015年1月23日在7:19
评论
不幸的是,这些都不起作用。我知道我可以使用link = Log Out,但是只是看看CSS中是否有解决方案。
–布赖恩·奥尼尔
2011年5月10日21:33
很抱歉听到:(不幸的是,我认为CSS没有匹配确切的参数。但是我可能会误会。希望您很快找到答案。:)干杯。
–汉尼拔
2011年5月10日21:36
抱歉,我犯了一个错误...请找到编辑后的答案...希望能对您有所帮助。 :)
–汉尼拔
2011年5月10日21:38
哇,行得通!我真的不认为那样。干得好,证明我错了。
–布赖恩·奥尼尔
2011年5月11日,0:46
:contains()并非当前CSS3规范的一部分,因此它不适用于所有浏览器,只有在将其拉出之前实现了它的浏览器才能使用。 (请参阅w3.org/TR/css3-selectors)
– Ardesco
11年5月18日在12:48