=========================================== Selenium Frequently Asked Questions =========================================== .. Please note that until there's a Q&A-specific construct available, this FAQ will use section titles for questions. Therefore questions must fit on one line. The title may be a summary of the question, with the full question in the section body. This is a work in progress. Please feel free to ask questions and/or provide answers; send email to the Selenium users email address at `selenium-users@lists.public.thoughtworks.org`__. .. _let us know: __ mailto:selenium-users@lists.public.thoughtworks.org .. contents:: .. sectnum:: Selenium ======== What is Selenium used for? -------------------------- It is used for functional or system testing web applications. These tests are also sometimes called acceptance, customer, or integration tests. Selenium is not meant for unit testing. Why can't I script google.com? ------------------------------ Question: *I was trying to write a simple script that does a google search. I have been running into all sorts of problems. Does this work for you? Here is my test:* |test|. .. |test| raw:: html <table cellpadding="1" cellspacing="1" border="1"> <tbody> <tr> <td rowspan="1" colspan="3">Test Type<br> </td> </tr> <tr> <td>open</td> <td>http://www.google.com/</td> <td> </td> </tr> <tr> <td>type</td> <td>q</td> <td>testing tools</td> </tr> <tr> <td>click</td> <td>submitButton</td> <td> </td> </tr> </tbody> </table> Answer: The quick answer is that because of cross-site scripting security built into JavaScript engines in all browsers, you can't edit the content of a web page from another domain. The foreign page will probably load correctly and be visible in the test runner window, but Selenium won't be able to query or edit its contents. In other words, you can't run selenium on "foo.com" and run a test that edits values and clicks buttons against "bar.com". So, in its current form, you can't "script" google.com because your script isn't currently hosted on google.com. When Selenium and the application you are testing is hosted on the same domain, however, you do not run into the cross-site scripting security feature/limitation. You read more about cross-site scripting here: http://www.devarticles.com/c/a/JavaScript/JavaScript-Security/ Also, if cross-site scripting security didn't exist, be careful about your field and button references in your tests. The current version of Selenium uses the "id" attribute of the object you are referring to in your test. The search field and submit button at google.com have "name" attributes, but not not "id" attributes. Therefore, Selenium wouldn't be able to find the objects. Future versions of Selenium will be able to search for objects by more than just the id attribute, though. How can I run my test against a foreign or remote server and get around cross-site scripting security? ------------------------------------------------------------------------------------------------------ There are a few ways around cross-site scripting to access a remote server. You could use a combination of proxying and URL rewriting in Apache to trick the browser into the thinking the application and the testing tool are coming from the same domain. Another option is to run Selenium as an "HTA" application, or "HTML Application" in Internet Explorer. HTA applications run in the security context of any trusted application on the client, so there is no cross-site scripting limitation. (You can find out more here: http://msdn.microsoft.com/workshop/author/hta/overview/htaoverview.asp) The equivalent to this "security-free" client on the Mozilla side of the fence would be to write a XUL wrapper/extension. Also, please see the answer to the related question: "Why can't I script google.com". How do you create test tables? ------------------------------ The developers on the Selenium project use Mozilla Composer to create plain HTML text files for their tests. By default, Mozilla Composer writes very clean HTML without any extra, unnecessary markup. Future versions of Selenium may support RST (ReStructred Text), or wiki-table syntax, natively. However, you are free to use another format now, as long as you remember to generate the HTML files from your source files, either during your build process or dynamically at run-time. :Author: Jason Huggins :Created Date: 11/05/2004 :Modified Date: 11/05/2004 :Created With: reStructuredText: http://docutils.sourceforge.net/rst.html