The way that selenium itself does this is to pass kwargs "by" and "value" in. See http://selenium.googlecode.com/git/docs/api/py/_modules/selenium/webdriver/remote/webdriver.html#WebDriver.find_element
That might make a nicer, more extendable, and more standard interface. 
E.g. if we want to add in by link text
See http://selenium.googlecode.com/git/docs/api/py/webdriver/selenium.webdriver.common.by.html#module-selenium.webdriver.common.by