- From: Mike Pennisi <mike@bocoup.com>
- Date: Wed, 25 Jan 2017 13:12:58 -0500
- To: Andreas Tolfsen <ato@mozilla.com>, public-browser-tools-testing@w3.org
- Cc: Sam Uong <samuong@google.com>, Maja Frydrychowicz <maja@mozilla.com>
Yesterday in the #webdriver IRC channel, Andreas requested some clarification: > Please share your concerns with using the wdclient library. Your email that > was forwarded seemed to mostly focus on test harness features, which wdclient > isn't responsible for. My concern about the use of any library (not wdclient in particular) is that it increases the complexity of the code under test. This can make the tests harder to understand overall, as critical details are abstracted away by a convenient API. I prefer to use a binding library when testing applications because in those contexts, I'm asserting the behavior of business logic, and details about the WebDriver protocol are irrelevant. Here though, the WebDriver protocol is itself the test subject. We should expect tests for (for example) "Add Cookie" to contain an object definition like: { "cookie": { "name": "foo", "value": "bar" } } ...rather than either of the two phrasings currently allowed [1]: cookies["foo"] = "bar" class Wrapper: def __init__(self, value): self.value = value cookies["foo"] = Wrapper("bar") Beyond obscuring the behavior under test, that kind of convenience is itself susceptible to bugs (e.g. note that the HTTP request produced by the previous example is incorrect in the current implementation) and requires additional maintenance. In the current project structuring, maintenance is a bit of a burden because fixing a test bug involves submitting a patch to one project and then updating a submodule. In this way, the "web platform tests" project is not the "single source of truth" for the protocol--the expected behavior is spread across multiple locations. (I'll admit that it's only my presumption that having the tests act as "single source of truth" is actually desirable for the specification maintainers.) I'm the new guy here, though, and I don't mean to rock the boat too much. If folks see value in these concerns, then we may be able to address them while still leveraging the library. Here's one possible scenario: - Move the library into the "Web Platform Tests" project - Move the pytest "fixture" definitions from the "wptrunner" project to the "Web Platform Tests" project - Formally define a policy in `webdriver/README.md` which states that the command under test must not be issued by the library code (meaning library use is limited to streamlining extraneous details) This isn't optimal because it requires contributors/maintainers to discover/understand/conform to an informal policy, but it could satisfy a majority of my concerns. What would you all think? Mike [1] https://github.com/w3c/wdclient/blob/1e751092c7f8f11748198fcb0c8c542f1216b466/webdriver/client.py#L142-L145
Received on Wednesday, 25 January 2017 18:13:32 UTC