1This file contains high-level info about how ChromeDriver works and how to 2contribute. 3 4ChromeDriver is an implementation of the WebDriver standard, 5which allows users to automate testing of their website across browsers. 6 7See the user site at https://sites.google.com/a/chromium.org/chromedriver/ 8 9=====Getting started===== 10Build ChromeDriver by building the 'chromedriver' target. This will 11create an executable binary in the build folder named 12'chromedriver[.exe]'. 13 14Once built, ChromeDriver can be used interactively with python. 15 16$ export PYTHONPATH=<THIS_DIR>/server:<THIS_DIR>/client 17$ python 18>>> import server 19>>> import chromedriver 20>>> cd_server = server.Server('/path/to/chromedriver/executable') 21>>> driver = chromedriver.ChromeDriver(cd_server.GetUrl()) 22>>> driver.Load('http://www.google.com') 23>>> driver.Quit() 24>>> cd_server.Kill() 25 26ChromeDriver will use the system installed Chrome by default. 27 28To use ChromeDriver2 with Chrome on Android pass the Android package name in the 29chromeOptions.androidPackage capability when creating the driver. The path to 30adb_commands.py and the adb tool from the Android SDK must be set in PATH. For 31more detailed instructions see the user site. 32 33=====Architecture===== 34ChromeDriver is shipped separately from Chrome. It controls Chrome out of 35process through DevTools. ChromeDriver is a standalone server which 36communicates with the WebDriver client via the WebDriver wire protocol, which 37is essentially synchronous JSON commands over HTTP. WebDriver clients are 38available in many languages, and many are available from the open source 39selenium/webdriver project: http://code.google.com/p/selenium. ChromeDriver 40uses the webserver from net/server. 41 42ChromeDriver has a main thread, called the command thread, an IO thread, 43and a thread per session. The webserver receives a request on the IO thread, 44which is sent to a handler on the command thread. The handler executes the 45appropriate command function, which completes asynchronously. The create 46session command may create a new thread for subsequent session-related commands, 47which will execute on the dedicated session thread synchronously. When a 48command is finished, it will invoke a callback, which will eventually make its 49way back to the IO thread as a HTTP response for the server to send. 50 51=====Code structure (relative to this file)===== 521) . 53Implements chromedriver commands. 54 552) chrome/ 56A basic interface for controlling Chrome. Should not depend on or reference 57WebDriver-related code or concepts. 58 593) js/ 60Javascript helper scripts. 61 624) net/ 63Code to deal with network communication, such as connection to DevTools. 64 655) client/ 66Code for a python client. 67 686) server/ 69Code for the chromedriver server. 70A python wrapper to the chromedriver server. 71 727) extension/ 73An extension used for automating the desktop browser. 74 758) test/ 76Integration tests. 77 789) third_party/ 79Third party libraries used by chromedriver. 80 81=====Testing===== 82See the ChromeDriver waterfall at: 83 http://build.chromium.org/p/chromium.chromedriver/waterfall 84There are 4 test suites for verifying ChromeDriver's correctness: 85 861) chromedriver_unittests (chrome/chrome_tests.gypi) 87This is the unittest target, which runs on the main waterfall on win/mac/linux 88and can close the tree. It is also run on the commit queue and try bots by 89default. Tests should take a few milliseconds and be very stable. 90 912) chromedriver_tests (chrome/chrome_tests.gypi) 92This is a collection of C++ medium sized tests which can be run optionally 93on the trybots. 94 953) python integration tests 96Run test/run_py_tests.py --help for more info. These are only run on the 97ChromeDriver waterfall. 98 994) WebDriver Java acceptance tests 100These are integration tests from the WebDriver open source project which can 101be run via test/run_java_tests.py. They are only run on the ChromeDriver 102bots. Run with --help for more info. 103 104=====Contributing===== 105Find an open issue and submit a patch for review by an individual listed in 106the OWNERS file in this directory. Issues are tracked in chromedriver's issue 107tracker: 108 https://code.google.com/p/chromedriver/issues/list 109