 So I appreciate you guys hanging in there been a lot of questions throughout the day that people wanted to ask the selenium committee So we do have at least four people and we are missing one other person So there'll be five people here who basically Either hold the commit bit on the selenium project or are eligible to hold this commit bit Do you guys want to quickly introduce yourself and then we can get started? I will start my name is Luke Committing to the selenium project for about four and a half years. I work at salesforce.com. I am currently in a UI development role there Dave Huffner I've been teaching about and writing about slain for the last few years and I've recently as of earlier this year become officially a committer I'm Simon Stewart. I created web driver. I'm the current leader of the project. I'm co-editor of the W3C specification And I'm here in India. Hello, India I'm Marcus Merrill. I am actually not a committer I've committed very little, but I've been using web driver since the literally the day Simon debuted at GTAC We started using it the next day I've now implemented it at four separate companies all of which to my knowledge are still using the framework So I had some chops once in a while once once upon a time I'm late Julian and Haven't committed code for several years, but as you can tell there's a long half-life So you get called back for a while and maybe I'll commit some code this weekend Do it. All right How many people have questions for the committee here quick show of hands? Good. This should be a lot more Because we have 45 minutes to kill I know you have a track record All right I'm gonna start with the first question just to lighten up the mood and then we're gonna turn around and get people involved So I would actually expect everyone on the panel to answer this question If you had a time machine and you could go back. What is the one thing you would not do on the Selenium project? Not commit code teasing Yeah, I think I would like to have seen the mobile Selenium mobile web driver continue Is this about the project itself or about my involvement with the project itself? I was gonna say I overwrote the hell out of my first few implementations and I could I wish I could have that back I think I Don't know I might have started The proxy stuff a little sooner Because that's become such a large part of what I need in the project, but I Could have done it. I just Didn't so that's what I'd like to have back Oh, yeah Well, the the glib answer the easy answer is a support library like I take that back It was just meant as demonstration code and it's sort of Metastasized into this incredibly useful pile of stuff that people depend on for their lives Which is confusing and perplexing because I'll be honest some of it was written while I was drunk I think more realistically I Wouldn't have changed much, but I would have gone faster like Selenium 3 we announced it a while ago And it's taken us forever to ship and actually it hasn't been a huge amount of code to get to that point It's been finding the time to do it. And so the thing I would take back is Misspending some of my time and focusing on shipping three I would probably take back implicit weights And just make explicit weights the only option that's a great answer. Can I can I change mine? Yes, that's fine. Okay I Would implement status codes in web drivers get in the sea The other is I've already rewritten history since we use get and it's already there. Huh what I would have changed It's already in history Yeah There's a good nerd chops All right, hopefully that kind of sets the stage for other people to ask questions now, so feel free to ask you know More controversial questions because that's gonna be helpful, right? Who had a question. I think you had a question here Do we have mics here? Simon question to you is If you look at Selenium IDE or Selenium RC, we have command set speed Example that doesn't exist in the driver It will it'll come in Selenium 3.0 just come on that kind of because we need to control the speed For example application heavily loaded. Okay, our network speed is slow See that now our tests are failing. Okay, even however, however you handle how much no Put some delay something something it is failing if you can if we can control the speed speed of execution That Okay, so this is ultimately can you have a set speed command? Okay, no There we go, that's the answer the actual reason for it is Two-fold like you were saying that your application is taking a long time to respond when it's heavily loaded and stuff like that That is precisely why we added the weighting classes and the explicit weights and the implicit weights to handle that case But the application is quite slow. The second reason is because I don't know what language you're using probably Java Yeah, Java in Java it's trivial to wrap an interface And have a proxy implementation that does whatever you want it to like it's literally a few lines of code And so if you wanted to have that level of control you could so there isn't any reason to put it into the core library and the reason why we don't want to put things into the Core library is because every line of code that we write is a line of code that needs to be maintained and worse It's a line of code that needs to be implemented by every single Implementation now you could do the set speed client side, you know on the on the local end of the test right where you are In which case it would be in the support library in which case it would just be something that wrapped a proxy in a way You went and in that case you've already got the augmenter so you could have your own augmentable in the way you'd go And that would be like ten lines of code Or you'd have to do it on the remote end in and in that case each of the browser vendors would have to implement The command themselves and then like what does it apply to does it apply to finding elements or just interactions or certain kinds of interactions And what about when you're using the advanced user interactions API and stuff like that. There's a bunch of decisions And you and your team are probably best placed to make those decisions Rather than ask going like we think this is probably going to be okay No chances are we hit the Pareto point right 80% of the time it would be okay, but 20% of the time You can like nope nope nope and then you'd want like timeouts on every method to be able to control that and then it would just It would cause an explosion and size of the interface for very little benefit over what you can already do Does that answer the question? I Know that's not the answer you wanted to hear You'd like a no-code answer There's no core code either, but you could have the method added to WebDriver technically Cool. All right. We'll move next. Who had a question? Have a very basic question Can you automate so WebDriver Selenium is an API for automating a web browser So anything that happens and the page of a web browser the HTML and CSS You can automate that using WebDriver exactly as a user would if a user can use your angular application Then you can in theory test it using WebDriver and Selenium now The protractor stuff that the AngularJS test runner actually has some hooks into WebDriver in order to facilitate that So the technical answer is yes, if I'm on the side of the question, but Dave do you want to? So ultimately it's WebDriver.js with protractor So effectively WebDriver is automating the testing in Angular But if you're not wanting to use protractor and if the question is can we just use regular old web driver slinging our own Test framework together the answer is yes it just requires more care because You know you'd have to basically use a lot of explicit weights to deal with the dynamic loading page content and you have to You know determine the locator strategy that you want to use and all the stuff that normally goes into testing a web application But there's nothing stopping you. It's just that protractor is you know helpful It's like it just solves all these problems for you because it doesn't it just does the waiting for you because it knows When the page state is ready and then you know if you actually were building the front end and you wanted to do Integration testing and mock stuff out. You could do that as well So like it really depends on what you're doing But if you're trying to do black box testing and you don't want to use JavaScript You could just do it in whatever language you want with whatever bindings you want and there's really nothing stopping you Using most of the ng attributes so in that case we'll end up always writing the locators with the x path So using x path is problematic is that what you're saying? Yeah In terms of performance like getting in the conversation of benchmarks of different locator strategies, I mean Unless you're using a really horrendous X path then the performance that gain is kind of nominal between them I mean IDs and classes will always be the fastest And then if you look at using the CSS selectors and XPath locators That's actually a negligible difference in performance between those two and then the only time is where they're really horribly for you know poor performance are when it's really very large very toothy nested lookups and Then well, I haven't run the benchmarks in edge, but I a last time I ran these benchmarks like eight eight nine ten There's just a couple where I like I won't handle certain lookups Or it's just like an order of magnitude slower, which is like one or two cases which are like locators You just should never use anyway But otherwise across the board. It's typically it's not bad I mean if you look at the benchmark data that was cited like pre selenium 2 it was horrible But everything since Make 2012 and on has been fine really and so if you're trying to look for a performance game you typically get a lot more benefit out of like looking at your your weight strategies and Make sure they like you know throw that sleeps and other kinds of stuff you get a lot more Boost from that then you would just by trying to adjust your locators. Although I will say that Test stability lives and dies by locators quite a bit So I would say that's you're not going to look to get performance in terms of speed game But in terms of reliability of your test results potentially is an improvement So I mean general recommendation is to avoid Using X path because of the stability aspect not so much from a performance game It used to depend on the browser like they used to be super super slow the implementation of X path in Internet Explorer was written in JavaScript the JavaScript engine in IE was slow But it's better now The more important point as Dave says is the maintainability of your tests decreases dramatically with complicated X path expressions Like today at the bug bash somebody was showing me that there's sort of tests And there was a sort of multi-line X path and it's like what that I was and It was clearly like the best thing that they could do to find the element that they were looking for but just looking at it was daunting and Figuring out whether or not it was right was like a real mental exercise Whereas finding by ID finding by even a CSS selector is so much clearer and so much more maintainable One thing that you can do which I don't see people do terribly often is web element Has the ability to find sub elements? So if you call dot find element on a web element you can just search that part of the subtree So what you can do is you can break up these really complicated X paths into well I'll find something by an ID then I'll find it by a class name And then I'm just going to search a tiny subset of the tree for a very controlled X path expression if you do that remember Any X path that begins with slash slash? Searches the entire document so after painstakingly finding a subtree if you then have an X path expression begins slash slash You throw that all away and you go from the top of the tree again, which is hilarious But not what you want So I don't I think that the general thought is that X path is bad, but I don't think that that's really true I think that there are potential misuses of it and the performance though is actually not as bad as it used to be So I think it's actually a fine thing to use when used appropriately. Yeah, it's just a foot cannon You all know what a foot cannon is Okay, so there's there's an expression like like you're pointing a loaded gun at your own foot and It's up to you whether you pull the trigger or not But what we've given you is a really good gun and we've basically put it on your toes But it's up to you whether you pull the trigger with it like you can do maintainable X path expressions and that's fine All right, let's move on in the spirit of giving this quick. Who else has a question over there? Thank you Compound class names, but that that will be supported right now. It's not right In future whether it will be so that's called CSS Can you just repeat the question the question was can't do can compound class names? Be used and the quick answer is by class name. No by CSS. Yes So instead of doing a space in between the two class names Just put a dot in front of each of them and you can it's valid CSS to say dot class 1 dot class 2 with no spaces That's yeah, just use CSS instead. Okay. Yeah, thank you Good evening So morning Simon was Referring that started this is a pet project and then Nine years back you didn't envision this kind of a growth Right. So my question today is what kind of a vision that you have for five years from now for selling them Five years from now. Yeah mission. Yeah Actually, can you give a road map with dates? I mean, yeah, so actually a long a long time So long a long time ago when I was at Google my manager at the time when How long do you think it's gonna take until you get like the spec finished and and and Selenium done and I Was an engineer and I had a think and I went it'll take about five years and my manager looked at me and went Doesn't sound unreasonable That was only eight years ago. So as far as engineering estimates go it was pretty accurate So the the other thing is he asked me for the name and I called it the Great Leap Forward Which is not a very good joke There we go. Yeah, nobody ever gets it, but it's the reason why at a W3C meeting. I was asked whether I was a communist Um These things happen So the next five years are kind of interesting as we're closing out as we're heading to Selenium 3 Selenium 4 we're at the point where the specification The W3C spec is almost done. I it's been almost done for a while But actually you can you can see it coming closer because everyone on the working group just wants it to happen when that happens the Selenium project loses control of The level it's got right now And it becomes open to the standards bodies It becomes far more amenable to the browser vendors to make changes that they want to So the interesting thing is the technical side of the project is going to become quieter and more quiescent, but There's going to be the explosion of mobile which is already happening and we're seeing and I'm really hoping that we go from being The kind of documentation which is okay But not great to having like awesome documentation and building the community around it and so the core of the project I think is technically sort of fairly complete But then on top of it, there's going to be all these other bits and pieces that need to happen And I think that's going to be sort of user groups conferences Rapper libraries integrating with the tools such as like Hewlett Packard are producing Better integration with the browser vendors to communicate with them and all sorts of things and mobile will be obviously like the big thing The internet of things people occasionally ask about But nobody says like how would I do browser-based testing of the internet of things? So I'm pretending that's not happening Anyone else have comments they want to add I Think you hit on the the point about other things on top of the technology But I do I do think that better documentation a newer website and I think just general stuff like More of everything basically that's not the technical implementation. So more conferences more meet-ups and all of those things So since morning you would have faced a lot of questions about like what is in there For the users from the selling All right now I ask you this question. What do you expect from the user group of selenium apart from using selenium? To take it to the next level What do I expect from a user group? Like a meet-up or actually users of selenium. I think Users of selenium to take it to the next level. Yeah, read the documentation Yeah, we have to update the docs first so some help updating the documentation so you can then read it would be That would be really good Just like the continued feedback and support like one of the things I really like about this project is In any city I go to there are people who are using it and everywhere I go The community is enthusiastic supportive and happy if you go to the IRC channel It's it's a wonderful place to be right it's just a group of friends talking And occasionally people come in and go like I need a hand and there's no flame wars. There's People are relatively polite. I mean there's loads of off-topic conversations that happen like every Friday I try and link to Rebecca Black Friday On sometimes you're successful. Are you yeah Luke sometimes manages it people have now got wise to the fact that this is what I do So there's things like that But the and the mailing lists Remarkably civil and remarkably polite given the number of people on them and the size of it So the thing that I'd like to see from the user group community is That continued goodwill good spirit and the ability to self-organize Like I went to Tel Aviv. I was invited to Israel to speak at a user group meeting Nobody on the selenium project had helped set that up It was just people who were enthusiastic about selenium had set it up and it turned out there were you know 100 people that would show up to it, which was phenomenal and same thing happened in London New York, San Francisco other cities like people just organize and they communicate and then the other nice thing about that is you have users supporting users and That enables us to have the sort of web of trust and support where you know that if you have a problem You can go for help and that's really important Cool things over there had a question for a long time. Let's go back there after that Hi Simon Actually The question is related to selenium grid Which we currently I'm facing one issue related to that Really I have a couple of around 10 test cases. I'm successfully able to run multiple instance on firefox But I whereas the same result is not in I Test are failing without Reason test isolation. Yes, that's the problem Okay, so certainly Way back in the day internet Explorer used to share cookie jars So the problem is your test run fine in parallel with firefox, but they choke with parallel runs of IE on the same machine I'll see him see him on The same machine. Yeah, okay So this is a test isolation problem Internet Explorer certainly for the long time shared a cookie jar between every instance running on the machine You could fire it up and it would try and isolate itself Jim Evans has done some amazing work to try and enable that isolation and make it good But it's really hard to do and so Probably with IE the the best way to get utilization and isolation for your tests It's a spin up a virtual machine for each IE instance Let that run throw that machine away when you're done with it and away you go now virtual machines Can be expensive to set up. They can be big but you can trim them down and Certainly at Google on the build grid. We were seeing Startup times of under 20 seconds for a VM running on a build grid. You can probably get faster than that with an SSD and decent memory and then You can also put like one VM per core and if you've got spinning discs instead of SSDs You want one VM her spinning disc and that will give you decent utilization and throughput But I think grid they probably have more experience with Dave and Luke have more experience with grid than I do and and Marcus and Marcus in fact everyone here has more experience than I do Virtually no experience with IE and grid I've avoided that like like something you avoid a lot You you answered that correctly the assignment just isolation IE Source labs will help as well and browser stack and You know third companies that provide provisioning in the clouds We have an yeah, we have an amazing grid infrastructure at retail me not it's a little bit homegrown. It's a self Growing self shrinking and we do a hundred percent of our automated IE testing with sauce At my company, we have our own homegrown But we do use virtual machines for IE and all of them are isolated Although we do not tear down between tests, but we'll tear down after a suite but we Don't run nearly as many tests on IE as we do on Firefox or Chrome Mainly because it's the test author's ability to control which browsers they run in and they see a lot of flakiness in IE And so they disabled it All right, cool. We'll go back there. Hi, good evening So selenium three awesome We're what's improved in core? That took a lot of work And obviously understand the reasons why you would want to do that because backwards compatibility You want to make people happy? I was just wondering what the drive was it took a lot of effort Why why didn't you just rip it out? Was there like a huge user base that I just don't know about was where there's some big players that are still using it But what what was the drive? Yes? Yes, there are there are I would probably put it in the millions of tests that still exist out there that are still with the RC based API I know at my company in particular. We have approximately 70,000 RC style or Flavor like basically with the leg RC. We're also lumping not only RC But the WebDriver back selenium into this leg RC package. So both of those combined my company has about 70,000 of those That's that's a massive amount of tests to Attempt to migrate to just WebDriver If I understand it correctly, you're you're hoping to remove it anyway in in two years from now, right? It really depends on which member that that the contributed team you talk to but There are a couple of things that that we have as like fundamentals of the project one of those is Hey, look when we're trying to think of how an API should behave. How would a user interact with a page? How would a user do that? The other thing is I certainly have a strong belief That people have made a massive investment in their testing infrastructure and their existing tests and to say to people That investment is now worthless is not a good thing to do now. What we can do is we can go by the way These things are going to go away. So if you look like the selenium interface is deprecated We've been saying for five years now stop using selenium move on to the WebDriver APIs And we've been trying to encourage people like that and you see sort of bit rotting code bases, right? So You know your tests probably aren't going to be running for 10 years unless you've got some fantastically long-lived product If you take a look at like the Standish report and things like that the average lifetime for a project is about three years So in theory we could roll off However, the problem that we're dealing with is one of inertia like companies that have made a strong investment in RC Continue that investment not because it's necessarily the right thing to do But because that's how they do their testing and switching their APIs is an investment They need to make and so what we want to be able to do is allow people to maintain their existing investment And have a clear roadmap of where they should be going next And where they should be going next is the WebDriver APIs and those WebDriver APIs are going to be stable between two three And probably four but the underlying wire protocol is going to change between three and four just as we removed Selenium core between two and three so like the reason why we went to the effort is because we care about our users and We wanted to do the best job we could The nice thing that we have now is that all the APIs all sit on top of the WebDriver APIs So at least the next time we have to go through this exercise And it's likely that at some point there will be something that's better than WebDriver out there the next time We go through this exercise Everything will be just a simpler job to port and so you'll have this sort of weird stack of Legacy things going all the way back to like RC Does answer the question Okay, good. Does it make sense? Oh You wanted concrete hard numbers like 70,000 existing tests and like and I think last year at selenium com somebody was telling how they were running a million Selenium core tests every single day Like there's just a staggering number of things and I think it might be a bit like PHP Like PHP is the dark matter of the internet Like you can't see it nobody talks about it and yet it's like 60 or 70% of all the code that's out there for service Right, so I think we have an engaged community who are here right now because you're engaged because you're interested You're using almost definitely the WebDriver APIs I think if you went out to companies that made minimal effort with their testing Not because they don't want to care but because they don't have the resources I think you might find a larger percentage using RC, but again Because they don't come forward and because I don't say anything that's just a gut feel But we'll go back there. I think someone's yeah Basically I have a suggestion It is for the element identification just like how we have we got find element by id export and css Why don't we have why don't we expand the portfolio and then have? identified identifiers Basically like right methods so that we can identify element by Title or all text or placeholder which are commonly used in all the browsers mean all the HTML Modern HTML pages also by label text so can we consider that as an enhancement for Selenium 3 Okay, can I just make sure I've understood is that finding an element by the value of an attribute or property? I don't know the difference. No one does No one's rising to that date Property There's a big debate in the project about one of the matters. Um, why haven't we got a locator for that? No one's ever asked for it. No one's ever contributed it And I think at this point Luke right right now I think if you were to say come into the IRC channel and ask that question the answer you'd probably get is you can certainly wrap the The API yourself and create your own Locator and usually that would delegate down to something like execute script if you needed to Although I would say from half of what you've just said it sounds like more complex CSS selectors or expat selectors that you could be using but there's there's nothing stopping someone from essentially implementing their own via the JavaScript executor and Sending us a pull request We would probably decline the pool which we might decline Actually locators is a good thing that remind people of in the w3c world that only ID and CSS and expat remain I believe The others are actually something like finding by class name or finding by tag name Just delegates down into a CSS selector We are actually going to be wrapping each of those calls and sending those for the implementations that speak w3c only Yeah, I mean the surface area of what we do is shrinking Not because we're taking away capability, but because it's possible to do an it but alternative implementation that means we have to require we have to ask vendors to implement less code and It's equally capable But then we care about your test and none of the locators are going away that we currently have they'll just continue delegating down in a sensible way that is equivalent and compatible Okay, cool. Thank you. You've been raising your hand for a while and then we'll come back there. Okay plus there and then come back Good evening again Sorry, if I will be a repeat it. I just joined a bit later I Would like to hear from you Do you think that they're running the selenium's on the headless browser such as the phantom jazz? is really helping us winning at runtime and Another question is one question at a time so we can Related to the same so and if there is other other benefits on running on the headless browser rather than the Running the tests on operation system. That has no UI. I I have opinions is one of the more terrifying things that people here in this project. Yeah It's always willing. I have opinions Headless testing is very attractive, but ultimately pointless I'll do that the sort of strong headline first and now I'll add the caveats Like why do I say that and the reason is Nobody out there uses phantom JS as their primary browser particularly in headless mode Just no one right and so you can see teams spending time and effort Fixing tests that won't fail in the real world and your tip your test automation engineers your software engineers the people Maintaining these things only have a finite amount of time Right and so if you're asking them to fix something that isn't actually going to make any difference Then that's a waste of time now If those tests ran an order of magnitude faster, then it might be worth making that investment But it turns out that it's still got to do Effectively all the page layout Figure out everything run all the JavaScript do all that the JavaScript engine is a few generations behind What is in the latest browsers? So the JavaScript engine is slower And the computational efforts of laying out the page is still required And so the only thing you're saving is painting the pixels to a screen. Well, whoo Like that isn't the thing that takes all the time So from where I sit I would actually prefer to use a virtual machine Spin up a real browser just test with the thing that people use phantom JS is based on webkit So I would probably do something that is a webkit derived browser if I wanted comparable speed or better speed and that kind of suggests Chrome or maybe in the next release of OS 10 or Mac OS is it's now now known the Safari driver But I realized people might not agree with me there. I think we all agree. I Can give some real-world data to that real-world data rather than just anecdotes So we encountered a bug actually in phantom JS especially with the version of webkit that it was running that our app crashed actually in only in the phantom JS version that of webkit that were they were running It didn't happen in Chrome didn't happen in Safari didn't happen in any other real-world browsers and our tests started failing and we We have a gate for every check-in that has I mean some We have a Smokes set a suite of tests that have to pass before any check-in can go into the source tree And these were failing because of this phantom JS bug and so because of that and we weren't able to upgrade and and and We actually switched to Chrome in in those test suites. So The performance difference actually was it's it's slight We added probably probably like two minutes or so I think to the to the 70,000 to the whole suite. Okay, but that It was There's two. I He's asking me time deltas of this thing and I can't tell you because too many other factors were changing all the time But at least it's those tests have become stable and aren't causing any issues because the driver itself Remember 2007 we used to have the web kit about Web driver and that we did a lot of work on they eventually just gave up on that as well So for me again, these headless browsers don't really have much value Much better test with the flaws of the real browsers and they have plenty bugs for us to find Without us testing on something that user don't use Right, I'm guess you're gonna say but I need headless testing because Okay, I just want to say that I asked the question to find out that we are on the same ground and I'm happy that you all all you say I had the same thing in my head Based on my experience because once I just in the morning I woke up and I say why not to run on the headless browser Maybe it's faster or maybe it has some benefit and in the middle I find out that the project will not be succeed and just I drop it and all the problems that you are mentioning I I filled on my skin and Doing all the bags and even I even didn't win any time on running on the headless browser because it's the time was the same the only thing that I find out that is positive thing that you can run on the OS without any UI, but it doesn't work to spend so much time for that the initial The initial thing that we tried to do that. It was like running a test on the phantom. Yes before the pull request Like to make sure that there is no massive failures then have on the real browsers that nitri runs which will give the real real like real Result, but then we drop it I will come over and high five you later for having exactly the right way of thinking Another gentleman over there has been raising the hand for a while Yeah, I want to add one tidbit of information about phantom JS and ghost driver. It's been unmaintained for a few years now so Be anyone who wants to step up and help maintain ghost driver They're looking for people to continue to contribute, but it's become Relatively inactive on the essentially on the web driver implementation in phantom JS I don't say that phantom JS itself has been come inactive. It's our driver implementation in phantom JS has been completely inactive Yeah Okay, so for those of you who are at home Listening because Aaron doesn't have a microphone Chrome are working on a headless implementation when that ships. That's a real browser that people actually use it might be worth testing on But I think we can now leave headless testing Okay, excellent and take the next question Right, so hello. I have a question mainly for Marcus. I'm guessing when building a selenium framework Do you prefer to pay to build it more based on static methods and statically and then not require the user of the framework to actually Initialize anything or do you prefer the more dynamic approach with initializing all the page objects and stuff like that? And if you could elaborate on why? This is a coding preference question. I'm sure If I was being super hip and trendy what I would do is a pure functional approach and Probably write it in like closure or a lisp dialect or Haskell Yeah, do it entirely in Haskell and you know have the test run as a side effect, which is obviously a bad idea My personal preference is I tend to be a fairly Classical OO developer like I like to have objects that do things and I like object orientation. I find statics to be Unpleasant just particularly in the environment are normally run Which is Java because you screw up a whole bunch of things particularly around the ability to run tests in parallel like the singleton Implementation of I'll put the value on a static fields It causes all manner of chaos unless everything is completely stateless if everything's completely stateless. It doesn't matter I just knew things up anyway because then I know that I've got these disposable things and there's no possibility of thread pollution Does anyone else like to do things slightly differently? I hate statics Okay, good. So most of us here would avoid statics except oh No, I'm gonna go a level deeper and say dependency injection non-static Give the test or everything they need when they land in the universe I'm maybe more extreme than Simon there Thank you So there is one thing I would add to that which was the original if you go back to like 2007 when I talk about page objects at GTAC So we're now almost 10 years ago. The idea was that a page object was representing the services offered by a page And so you would return from those page objects the next thing that you would navigate to and things like that And therefore It kind of implies that you're newing objects up and you're passing them around because what you're doing is you're saying to a user Here's the behavior of my application and then the app The page object is the only thing that knows about web element and how to find things and how to deal with that And the advantage of that encapsulation is that if you change how the page objects behave If you change how the pages behave then the page objects change on top of that the idea was that you would build workflows Which were more sophisticated Antony and Andy tomorrow I think it is have a talk about their evolution of that pattern into the screenwriter pattern Which seems really interesting as well So if you're interested in writing your own test frameworks and how to do that in a nice way that might be a really good talk to attend tomorrow Cool. You have time for one last question and this Ask your question, please Yeah, so I don't have a question, but I would just like to share my experience with selenium web driver and angular j s applications Since there was a question around so there's something called fluent selenium, which is available Which can be which works perfectly with angular j s applications It's a wrapper over selenium web driver written and it has ng wait as a method which actually waits for the Angular j s page to load and you can you know work with that very well I've been using it in my project and I have not written any thread dot sleep or Implicit weights explicit weights in my in my code. So you can just explore that That sounds awesome. Thank you very much Sorry, what was the name of that frame I can get in your member we can download it from it's fluent selenium Fluent selenium You speak into the microphone place sure the question is Is there any future support for WPF applications? We have just opened that application in Windows machines and we have the browser Interface in it simply we have the same kind of application in Mac as well in Linux So just want to know is there any future support for that? WPF applications. Okay. So selenium is a browser automation framework WPF is not a browser. So technically no In reality, there's been a project that's been around forever called white Which is written here in India actually here in Bangalore. It was started Yeah, it's a dotnet project that that is pretty cool. I think Microsoft have something I Think I'm not sure. I know that eBay. What did what did eBay have? Microsoft has UI automated. Oh, they had they had a runner as well, which they open sourced and things like that Yeah, Francois wrote it There are things out there that allow you to use the web driver APIs or similar APIs to test WPF applications That's sort of moment. We've got an embedded web control is difficult If you were using the original versions of water that could you could say hey look here's a control and then it could hook into it We never implemented that We have implemented something by ourselves. We are customized using see sure See language and we are able to get into that but While switching to one windows to another windows, we are facing issues. That's why okay. Yeah I mean, it's just the devils and the details Okay, excuse me one second if you're having a conversation that's cool But can you make it so we can't hear it here on the stage because I'm trying to listen to the question Thank you Yeah, just it's just a application that you open and we see the browser interface in it So we are able to automate right now. You we have implemented using see language but actually we have implemented through 32 bit and And we have to change it to 64 bit. So we are entirely we are to change the scripts So that is where we are facing issues because we have to switch from a parent to child there Yeah, I mean that just sounds horrible. I'm sorry. I Don't have a good answer for you. I all I can offer is sympathy and support Does anyone else Windows machine the same we are to implement in Mac as well in Linux. That's why okay. Yeah as far as I'm aware There isn't a cross-platform cross-windowing toolkits Automation API that uses a web driver API's Anyway, yeah, sorry. I think it's the best we can do here. Maybe a hug or something All right, awesome, I think we are running short of time. So we'll try and wrap this up So thanks for the Selenium community to come here and answer some of the questions in as entertaining manner as possible Hopefully you guys got some of the answers These guys are around for tomorrow as well. So feel free to grab them and have more questions answered