As Shawn mentions, whatever option you go with, it needs to be accessed remotely like a service. They are all compatible with Jenkins, because it's not a Jenkins issue but a remote execution issue. Some other options besides what Shawn mentions are:
Language agnostic solutions (via WebDriver API but working similar to Robotil)
For a Selenium grid supported Sikuli (for Java):
Another thing to be aware of is whether your jenkins job executes locally or remotely, and whether it has access to a desktop UI. If it executes locally on the jenkins server where the test code resides, you might not have the issue Shawn mentions. But If no access to a desktop UI, e.g. using xvfb or headless browser mode, that's going to be a problem with handling upload dialogs where a UI is expected. And having a locked desktop could also affect that (desktop UI must be open, not locked, or if in remote desktop session, the session must be active). If you need a UI, I believe you generally don't execute on the Jenkins server but have the job on server execute against a slave that offers a desktop UI, etc. (for better reliability anyways).