I think the current implementation is less verbose:
```
self.q(css="div.foo")
```

vs

```
self.q(by="css", value="div.foo")
```

I'd also argue that we don't need additional flexibility here.  It's unlikely that we'll need (or want) to implement a querying DSL more complex than CSS + XPath.