So I use xpath locators and slowly converting to CSS.
I haven't found a way to do an exact match based on text.

For example converting //a[text()='Log Out'].

I know you can do css=a:contains('Log Out') but I want to match exactly to the text. Also I know I can do link=Log Out but looking for a solution with CSS.

css=a[text='Log Out'] or a[innertext='Log Out']

Can you please try this one out?

Or if that doesn't work and you still don't want to use xpath because it's slow, you can always try: link=Log Out. That's still better then xpath.


So i found a possible solution for you mate. If you are trying to find an exact String you could always use Regular expression like this:


Just replace div with a and there you go. This will find ONLY AB in whatever text div it looks for. OFC if you have more then one links with text AB (which is a bad thing :P ) then it will find them all..

Try this and see if it helps. :)

| improve this answer | |
  • Neither of those work unfortunately. I know I can use link=Log Out but just seeing if there was a solution in CSS. – Brian O'Neill May 10 '11 at 21:33
  • Sorry to hear that :( Unfortunately I don't think CSS has match exact param. But I might be mistaken. Hope you find an answer soon mate. :) Cheers. – Hannibal May 10 '11 at 21:36
  • 1
    Sorry, I made a mistake... please find edited answer... hope THAT helps. :) – Hannibal May 10 '11 at 21:38
  • Wow, that worked! I really didn't think it would. Nice job proving me wrong. – Brian O'Neill May 11 '11 at 0:46
  • 9
    :contains() is not part of the current CSS3 specification so it will not work on all browsers, only ones that implemented it before it was pulled. (see w3.org/TR/css3-selectors) – Ardesco May 18 '11 at 12:48

This is a nice place for a few CSS selectors.


Thought it might be useful for people following this thread.

| improve this answer | |
  • nice explanation of differences, thanks for the link – Peter M. - stands for Monica Oct 28 '14 at 17:17
  • Its very error prone sharing a link. Content of that link could change. – paul Mar 14 '19 at 11:16

For those who are looking to do Selenium css text selections this script might be of some use

Trick is to select parent of element of one that you are looking for and then search for child that has the text.

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];

this will return first element if there is more than one since it's always one element in my case.

| improve this answer | |
  • 1
    This looks to be dependent on jQuery being available to execute the javascript? – David Jan 22 '15 at 23:25
  • @David it absolutely is, but it should be possible to rewrite it in pure JavaScript. – Matas Vaitkevicius Jan 23 '15 at 7:19

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.