因此,我使用xpath定位器并慢慢转换为CSS。
我还没有找到一种基于文本进行精确匹配的方法。

例如转换//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),那么它将找到所有链接。 :)

评论


不幸的是,这些都不起作用。我知道我可以使用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



#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