 Good morning. Good morning. So we are ready for a fishbowl. We're going to get started with the fishbowl. Quickly explain how the fishbowl works. The idea with the fishbowl is we're going to have the commuters on the stage, like we had last evening, but we have two additional chairs, which basically means that anyone from the audience can come up and take a chair whenever you feel that you have a better answer or you have something more to contribute than what was already spoken. So you can come up here, grab a chair and give your two cents, add your two cents into this. The rule of the fishbowl is at any given point in time, one chair needs to be empty. So these guys, they put clues on the chairs, so they're going to be stuck. They can't move, but between the two chairs, we can have one person come up and when the second person comes up, the first person will have to leave. So they keep one chair empty. Make sense? So we have basically room for one person to come up, the second person can come up and the first person can leave. So let's invite our commuters on stage. We're missing Sandy. So that leaves more chairs for people to come up. All right, do you guys want to say something before we get started? Good morning, everyone. Are we having a fun conference? Who's not having a fun conference? Okay, I think we're all having fun. All right, so who has the first question for the day? One request is please keep your questions short. That'll help answer more questions. Right? We'll go here and then there. Okay, hello, Rupiti. So myself, Amit. So I have a question. There's an open bug in the bug list. Like we cannot hook the Serium code into an existing browser, which is open manual. So sometimes we face while executing a very long transaction-based scenario where to debug that particular point, we need to take around five minutes to reach there. So sometimes it would be easy if we can have this. So if not possible, just wanted to understand the restriction. So the reason that it's not possible currently and is difficult to attach to a running browser instance is that the WebDriver library has to communicate with each browser somehow, right? And that communication channel is usually some sort of a TCP board. And the only way that the browser, you can instruct the browser to listen on that TCP board is to do it when you launch the browser. The browser by itself doesn't have the ability to just, hey, start listening on TCP board when, I don't know, when you flip a switch in the UI. There's no way to let it do that. So in the case of Firefox, we have to use a profile to do that. In the case of Chrome, there's a command line switch that has to be added to Chrome or that the Chrome driver adds to Chrome to start listening on a port. Interestingly, Internet Explorer is a little different. There is a possibility that you could, in theory, connect into an existing browser. I have been reluctant to add something like that, specifically that's IE-specific, because I believe that our API is and should continue to be cross-platform. So there is, however, a really easy way to solve this problem, which is to not solve it. If you put the lifecycle of the browser under the control of Selenium, like if you start the browser that you're going to use for the manual section with WebDriver, then you already have that connection up and running. And when you hit the end and it's like, ah, now I need to be able to poke around in the browser and control it, because you've already started a browser session, you'll be able to do that. If you're using the Selenium server or something like that, you could probably use Python to give you a REPL or even Ruby, right? So you don't need to code everything up. You can have a completely interactive session. And that might actually save you a lot of time and effort. And you could do it today and it would work for all browsers. Thank you so much. Namaste. This is Bharat. I represent a company called Railocas. First of all, the reason why I came here is to make sure that I wanted to thank you people for having this Selenium project keep going. The reason is just that, the reason why Railocas exists after two years of being founded. I'm sorry, get to your question. Yeah, I'm getting to it. The question is simple. I wanted to know what is the plans about the HTML5 related to the API with respect to web driver? First of all, I'm really, really pleased to hear and very humbled by your comments. Thank you very much. HTML5, that's a big beast, right? And it's composed of a number of different moving pieces. Like CSS3 probably hooks in there as well with the 3D transforms and the horror that that entails. So let's break it down into the various bits and pieces. HTML5 is an evolution of the HTML standard. It's presented in the browsers. It's still got the DOM. Web driver will continue to work with those things. The next thing we're probably going to come across is the fact that it's got new form elements that people use. We have, in a standard, had several discussions about how we're going to handle those and we just need to write some utility classes to make that work the way we want it to. But effectively, each of the new HTML form elements has a sort of string serialization that it sends across the wire and we will make it easy so that if you do send keys with that string serialization, the correct thing will happen in the HTML5 form element. Do you want to come up here and just sort of talk to us about the things you want to see in HTML5? You don't have to. Okay, that's a very wise man. What other things in HTML5 would you like to see us support? So the form elements. We have plans for supporting those in an elegant way, but for now it'll ultimately boil down to calling send keys, but we'll put wrapper classes around that to make it easier and nicer to use. Excellent. Okay. So yes, HTML5. Wonderful thing. We will support it. Relative to the HTML5, you're talking about shadow DOMs. Is it a problem? But actually, my question is, as for HTML, probably more like JavaScript, will there be a support for... We see now a single page application and more stale exceptions. People have to write their own code, read drives, the page factory isn't perfect for every solution right now. So will there be focus on that topic? And the second question is something, we've already been asking this, and I didn't hang out, but that was a discussion about the image capturing that I know everybody's picking on you, because it's not your fault. But it's kind of... Okay, there's a standard. You decide on the standard, but every browser takes different screenshots. Only the viewport, some cool canvas. And will there... At home, until home driver number two, it didn't work full screen, and now it doesn't. I know everybody keeps complaining, and you can see that it's almost like the HTTP response. That's it, so. Okay, so the first question is around stale element exception. Sit upon. Single page applications. Single page applications and stale element exception. Yeah, it's interesting, right? I mean, I've worked on projects where we've kept the chain all the way back in a web element, and if we fail to interact with something, we do one look up. That always upsets me a little bit, because it means that I've lost control of my application, like I have no idea really what's going on. Until something like React came out, I think that was a perfectly reasonable position to have. I don't mean I'm a commudant, right? So it's a commudantly reasonable position to have. But nowadays it's getting increasingly difficult to tell when the underlying DOM has changed. I don't know is the answer. If we do do something, it'll be done on the local end. So it'll be like, hey, I tried to interact with it, and now I failed and say, here's some retry logic or whatever it is. Which is fairly easy to write. None of it's too complicated. And so I'm left to do something like that, because every time I put something in the library, people start leaning on it, and they start going, like, ah, here's an example of how things do. The expected conditions I put in there is here's a sample of how you would use the weight, and people are going, well, there isn't an expected condition for the thing that I want, and so here's a patch that gives it to you, and like the expected condition is now like a bit bajillion things long, right? And it's like, it was just meant to be an example to show you what you could do for yourself. But maybe, I mean, it is something that comes up frequently. Santi, did you want to add anything about stale element exceptions? No, I think I'm good. I was just wondering, when you tried this, look up after failure, did things just work? No. It alleviated some of the pain, but it didn't work consistently, right? And that's because, actually, you'd lost control of the page. You didn't really know what was going on. And the better thing to do was to go, okay, I'm now going to use an explicit weight. I'm going to look for that element again, and away we go. And the reason why we were doing that is because we'd performed some interaction on the page that had caused the page to be updated using JavaScript. And people normally think of, like, using the expected conditions, the explicit weights, when you do a full page reload. But really, it's like, I've done something that I expected caused the DOM to mutate. That mutation doesn't happen in real time. You've got a race condition going on. So it's always best to, like, cause a mutation to happen, wait for it to be done, then continue moving. Okay, so I'm going to say something, and then I'm going to see Simon throwing things at me until he throws me off the stage. But the way I went around solving that was to basically wrap every action into implicit weight for HX to finish and for the animations to finish. And that way, if you have a form that you're filling out, the typing action sets the text and then waits for everything to finish loading and only then proceeds. So having those implicit weights and then the second thing is to not have a reference to any element in memory and look it up every single time you are trying to interact with everything. So start basically from beginning and that way you get the fresh element every single time. But again, it's not a pretty solution. That reminds of Selenium 1. Okay, I love K. Congratulations, yeah. The first idea I've applied in a similar way without implicit weights, but by putting application-specific wrappers around form elements. So I've created my own text field, for example, which is where the fact that, hey, look, there's some validation that goes on or there's some JavaScript that gets done or it auto-corrects my spelling of whatever word it is. The second idea will murder your speed, particularly if you're using a service such as Source where you're not running on your local host, but you've got the entire Internet three times between you and each request you make. So you sort of go from your local machine out to Source Labs, then the browser does something, comes back, and then comes back to you. Oh, four times. You know, the speed of light is fast. But if every single request you make is an RPC and you've got like two times the Internet between you and getting that response, it's going to murder your performance, right? So I probably would not hold a reference to an element, but I would have custom wrappers around classes. So you're only halfway thrown off the stage. Hey. Hey, Salman. So my name is Krishna. I come from PayPal. So I have two questions around the even-firing WebDriver. So one, the Java bindings. So why does the even-firing WebDriver use a proxy pattern in order to, you know, in an instant? It was demo code. It was like, here's how you could use, here's how you could track everything that WebDriver does. Okay. And proxy, the dynamic proxies is how you do that in Java. Okay. So the second question is, why doesn't even-firing WebDriver support the actions class? As in, like, you know, whenever I use the even-firing WebDriver and do some M and some find element or some click and all of that, all of the hooks get called on. But every time I do something using the actions class, nothing happens. I've been trying to find this one for a couple of days, a couple of months now. I mean, I haven't been able to figure it out. So I thought I'd probably ask you... Yeah, it's probably going through a method that we haven't proxied. Like, we proxies several things, but we don't have hooks for, like, on X for every single method. And it's probable that we just missed it. Because, like, the event-firing WebDriver was a case of, like, someone coming up to me going, like, I don't know how to log all the things that are happening in it. And it's like, well, this is ridiculously easy. I don't know how to do it. And so it's like... You could do it at the command executor level that goes, ah, that's a two-level level. And it's like, well, here's how you would do it with the dynamic proxy. And it was, like, useful code, but it's pretty old, right? It predates the actions API. And so it's not there. If you send me a pull request, I will pull it in, and then it will be available for everyone. So check out the code, send me a pull request. That I will definitely do. I mean, yesterday after you said that, I'm going to be needing some help with the documentation for the part. I thought, you know, the easy way for me to come up and sit along with you guys is probably send you half a dozen pull requests on documentation. I would love that. That would be awesome. In the genuine sense of the phrase, awesome. You know, you're welcome to come up here, guys, if you want to have, like, a conversation with us and kick things off. Like, there could be something really controversial. I don't know. Have we got the API right? Does the web driver API feel good? Would you prefer the old Selenium one? Would you prefer Watan's one? Would you... Oh, I don't know. What would be exciting? Proxy handling. Have we got that right? Okay. Assuming no one wants to... Sandy has a question about that. No, I'm kidding. Do you want to? No? Okay. Okay. I guess we'll take another question from the floor if no one wants to come up. We very seldom bite. Hi, my name is Anto. I have a quick question. So the file upload of the Selenium, I mean, Safari browser is not working. So the weird thing is, if I run a JavaScript code to click on that input type file from the control of the Safari, it works. The same code, when I try to run from the JavaScript executor of the Selenium library, it doesn't work. And the only way we are doing right now is using Apple script. So if you go via Apple script, then parallel mode can't be done. So we are slapped. So I need an answer. Is the question, why is the Safari driver not that good? Or, I mean, in the lightest possible way? Yeah. I mean, the main question is, why can't it be able to click on the input which of type file? Through JavaScript. Right. Yes. So, Jim, go for it. So, to answer that question, you kind of have to understand a little bit about how the Safari driver is built and how it works. The Safari driver is a JavaScript, mainly a JavaScript implementation. And in JavaScript, when you call a method, or a JavaScript function, that brings up a modal dialogue on the UI thread, the JavaScript thread, the JavaScript execution is blocked. And so, for uploading a file, that is exactly the case that that describes. You call a JavaScript function that then brings up a modal dialogue on the UI thread. That is the file selection dialogue. And the JavaScript is blocked until that dialogue is dismissed. It's the same reason that the Safari driver doesn't support alerts, the alerts API, is because we don't have a good way right now to not block the JavaScript thread when the modal dialogue is presented on the UI thread. It just is a limitation of the way JavaScript works in modern browsers. Other drivers don't have this problem because they're not JavaScript implementations inside the running UI thread like the Safari driver is. And Safari driver is unique in that respect. Yeah, the Safari driver is basically a hack. We needed Safari support. Everyone needs Safari support. But it's very similar to the original Chrome driver, which was like it runs as an extension in the browser, but it doesn't have access to the internals of the browser. It can't do insecure operations and things like that. It's limited by the extension's API that Apple offer. The real nice thing that would happen is if Apple were to step up to the plate and do their own implementation, and I think for them to do that, we need to finish the specification. I think that's the thing that would help Apple move forward. So yeah, we should get on with that spec at some point. That's what we should. Thank you. I expect we should. I expect we should. So the question, by the way, the question for those who may be watching this later was, do we have a relationship with the Safari team? Do we know anybody there is the question? We run into the culture of companies, right? Talking to Google, Google has a very open culture, so does Mozilla, where people are willing and able to communicate and participate in open source. Microsoft have, over the years, become more and more open and they come to the face-to-face meetings. They discuss things with us. They are writing their own implementation, which is brilliant. But they have a corporate culture that is concerned about open source for reasons that they're worried about, you know, if some of it gets in and the viral nature of the GPL, what happens to their crown jewels? And so they're quite sensitively protecting things in the best way that they believe is possible. The corporate culture at Apple is a more closed one, right? I mean, you know, Apple famously don't really leak very well. They were a company that leaked from the top, right? It would be like Steve Jobs back in the day going, like, oh, by the way, we've got this amazing, oh, crikey, I shouldn't have said that, right? The lower levels in the engineering levels in Apple are incredibly disciplined about maintaining the strictures that they have of their corporate NDAs. So we talk to the Apple team. We obviously, you know, I run into members of them. David does. We communicate with them, but the culture of the company isn't one where they will come out and say to us, oh, by the way, we're doing this. We are following the steps that we are meant to do in order to do the right things. So, like, David Burns has filed an issue on the WebKit radar going, like, could we please have WebDriver support? And, like, that's the end of the public face of Apple, right? It's just the way the company is. I'm not saying anything good or bad about them. I just think that's the way their company works. My expectation is that Apple are a company that do a good job with standards implementation. Like, Safari knocked it out of the park when it came out, right? It was, like, Opera had a fantastic standards implementation, and then WebKit came out and just also did a really excellent job. And, you know, the unit's compliant in OS X and things like that. So they understand standards and the importance of it. And my expectation and hope is that when we get the standard out, the specification, then there's going to be that concrete thing which allows Apple to participate in the browser automation community in a way that currently I don't think we've enabled them to do. Yeah, and, yeah, for those of you not listening, that provides context for how important this back is. Did anyone up here want to add anything to that? Okay. Hi, my name is Tarkesh. I'm from EMC. I just have a small question. This question is to Simon. Can you share little details about the Selenium landscape in Facebook? What kind of tests do you run? How many tests do you run to keep us happy? I don't know the numbers off the top of my head. Rather interestingly, at Facebook, which is a company I work at as a software engineer, I work on our build tool instead of browser automation. Like, I arrived, the first project I worked on was helping set up some of the end-to-end testing for mobile for Android for iOS. I rolled off that project about a year, 14 months after I joined, and I'm now working full-time on the build tool team. The build tool, by the way, is Buc, B-U-C-K. It's open source. It's on GitHub. It's like a next-generation build tool. If you build at any Java, take a look at it. It's blazing fast. I'll stop advertising things now. My second question is, we all face so many challenges day in and day out working with Selenium. Do people at least have one challenge working with Selenium? One challenge in implementing Selenium. I think... So, I'll pass the microphone down, because I think we can all answer this one, right? For me, Paul Hammond had it right when he called me insane when I started down the path of tightly integrating with the browser instead of doing the JavaScript thing that Selenium RC, Selenium Core did. And he was entirely and completely correct that it was an absolutely bonkers thing to have done. And if I'd realized how hard it was, I wouldn't have started, but I was young and foolish and did it anyway. Big challenge. That was the original C++ code if you didn't hear what Simon said. That was a challenge. I think for me, probably the biggest challenge was not a technical one for me. The biggest challenge was simply... was social on my part, just getting over the hump of thinking, wow, can I really do this? Am I able? Do I have the ability to do the things that needed to be done in the project? And, you know, that to me is something that I think was a real challenge for me to overcome, to just dig in and do it and start. And if I wasn't up to it, then I wasn't up to it, and that was probably my biggest challenge. I think for me would be how extensive the code base is. It's actually definitely challenging every once in a while. You have to get reminded of the structure and where things are, the fact that there are about six clients, seven clients. Every code change you want to do, you have to apply it. If you go on the client side to seven clients, talk to seven people who own them, and push them through a huge, immense crowd of people who will be testing them. So it's a big challenge for sure. For me, it's pretty much the same story. Every time you get on a new project that has a Selenium build inside of the build tool, and the fact that Selenium build is always the last one to run, and it is 90% bread, because there's one or two tests that constantly flake out for whatever reason. And so it's easy to think about this as a technical problem. Oh, we need to stabilize the build. We need to put these AJAX things, and we need to do this, this, this. But in fact, a majority of the testability seems to be a cultural problem, where the developers or the team, the QA team, whoever does not really respect the Selenium build enough to actively maintain it. And so having to convince the whole team, hey, guys, this is important. It's a first-class citizen in the build queue, and once you move it up, though, once it's no longer this last thing that runs that nobody cares about, and get it to run every single build and then convince the team to help you out and root out all the little flakiness and everything, once you get to a point where it's 99% green, it takes a year or two to complete that cultural shift, but once that happens, it's quite an amazing result. The result where Selenium build fails, and several developers just completely jump up and start to freak out, like, what did I do wrong? What did I do wrong instead of eh? It's whatever. I'm going to ask you to hang on, because this gentleman here has had the mic and has been trying to ask a question for the last three or four people, and so I'm going to stop you and say, go ahead. So thanks, everyone, for being here. So my question is two questions there. First question is, when I try to cast IE driver to even firing web driver, I get series of exceptions. I mean, is it a known issue, or is it something related to my implementation? Second question is, if you could add one feature to Selenium on one click, what it would be? So I'm sorry, your first question was, when you try to cast... When I try to cast IE driver to even firing web driver. To even firing... Okay, right, right, right. Because the reason that doesn't work is because whenever you try to cast something, it's an is-a relationship. So you can think of it as IE, the Internet Explorer driver is an event firing web driver, and it's not, right? It's not one, so you can't do the direct cast. If you want to use event firing web driver, then what you do is you take your Internet Explorer driver instance and you create the event firing web driver wrapper by calling the constructor and passing in the driver instance, and that's how event firing web driver is supposed to work. The second question, one feature. I guess we can all answer that. If I had one feature that I could magically put in, it would probably be... I would magically add a way to get the operating system identifier of either the browser process or the browser window itself, because all operating systems have the concept of some way to uniquely identify each window element or each window in its window manager and each process that's running. And if I had the ability to get that, then that would open up a whole wealth of possibilities for companion projects to the Selenium project, but that is probably never going to happen, so that would be the one feature that I would add. If I could add a magical feature that does not make any sense, that would be useful. I think it would be recording videos at a Selenium. I found it to be extremely useful when you have a failure to be able to see four frames a second or 12 frames a second exactly what happened in your application throughout the execution. So that'd be mine. My friend, do I have a project for you? Right now, my biggest gripe and pain point is trying to simulate hovers in different browsers, and part of the biggest, I personally believe that one of the biggest reasons that Internet Explorer is so horribly unstable for my build right now is that we have to inject some JavaScript snippet into the DOM to simulate a hover. It's so complicated. So my feature would be to say, hey, there's this link element. I want to move the real mouse right on top of this element, and instead of simulating the hover to actually have a hover, that would be awesome. That's already there. Oops. It was fast. We just did it. While you were asking for it, we went ahead and wrote it. I think the thing that I would want would be a really elegant API, like where you look at it and you go, yeah, that's how it's meant to be. WebDriver started off like that. The API was really, really tiny, and it's grown a little bit. WebElement is still that way. The two areas where I'd really want that elegance right now where we don't have it is around simulating user interaction using the advanced user interactions, like the actions in a new actions in your personal driver, that stuff. That is inelegant and feels clunky, and I don't know how to make it beautiful, and that would be nice. And then the other thing that's coming is the HTML5 specification has a bunch of things like Shadow DOM and web workers and things like that, where it will be really nice to be able to interact with it, and I'm not sure how that API should feel either. Right? And so it's an aesthetic thing, and we did pretty well with the sort of, I think we did pretty well with the feel of the API to begin with, and I'd like to continue that, and I'd like to sort of move that forward into the next generation of APIs that are coming, and I don't know how to do it. This is going to be a little bit of fumbling as we figure it out. Yeah, this is Sai Kumar. When I worked with the Selenium RC, I used one of CSS selector like Duke contains, Duke colon contains, especially while targeting IE, so to avoid expats. So I used to use this, especially if my application is an X-based application. So such format is not allowing in web driver nowadays. So what is the constraint, like it is from HTML standards or it's in part of web drive? So let me see if I understand correctly. You're asking about the contains pseudo selector for CSS selectors? Yes. Okay, great. That's not a standard CSS selector. It's not, it doesn't appear in any CSS standard that's put out by the W3C. Now, it's been made very popular because jQuery, which has its own CSS selector engine written in JavaScript, it does the standard, the CSS standard selectors, but it also adds some extra ones for convenience sake. One of those extra ones that it adds is contains. Now in Selenium RC, I believe in some cases we used to inject the jQuery in Internet Explorer, we used to inject the CISL CSS selector engine, which is jQuery CSS selector and it was called CISL. We would inject it into, because at the time, Internet Explorer didn't support CSS selectors, so we used it as a polyfill. And of course, that gave you the ability to use anything that the jQuery library would let you use, including things that were not standard CSS. Now that Internet Explorer does have a native CSS selector engine, so we always delegate down to the native CSS selector engine if it exists, and so we rely on whatever that allows us to do, which means that for some versions of IE, some of the CSS3 selectors don't work, like Nth of type doesn't work in some versions of IE because Internet Explorer doesn't support it in their CSS selector engine for that version. And contains doesn't in any browser because it's not a standard CSS selector. It's simply one that was implemented by the folks who created jQuery. Fortunately, you can download Sizzle as a library and you can inject it onto a page yourself, and then you can use Sizzle directly in a locator, right? So although we don't ship it inside the browsers, you can grab hold of a copy and you can use it pretty easily. And there are examples on the web of how to do that in a buy, for example, where it is and it will work the way you expect it to. Okay. I have a second question. Especially when I trigger a suit against IE. So somehow the connection is, you know, losing in between a browser and a web driver. The session is, you know, it is getting expiring or it's somehow it's losing its connection. So what could be that cause or is there any work around the browser? So it's losing, the driver is losing the connection to Internet Explorer. That's what you're seeing. By script is containing its execution but the browser is not responding. So is this an RC or in WebDriver? In WebDriver. Especially for IE. So I can think of some reasons why that would be the case with Internet Explorer in particular. I'm not sure what losing the connection actually means in this context. But I do know that protected mode settings are a big, big hiccup for Internet Explorer. The way the Internet Explorer driver works. This goes back to the history of when IE7 shipped and they introduced user access control in Windows Vista. One of the things that changed radically was that they introduced the notion of Internet zones or security zones and the concept of protected mode. When you're using the COM interfaces to drive Internet Explorer and you cross a protected mode boundary, so if you go into protected mode or out of protected mode what happens is that if you're using COM to drive the browser, when you cross that protected mode boundary the COM interface pointer goes away. It comes orphaned and it goes away. One of the other scenes is it abandons the original browser, creates a new one to navigate within the new protected mode zone. It can't switch zones like that. You have to kill one and start another one. So your COM object pointer becomes orphaned. We work around that problem in the IE driver by saying and we enforce that by saying that we look in the registry and look at your protected mode settings and see if they're set to the same because if you set the protected mode settings the same for all of your zones it doesn't matter what site you navigate to you will always be either in or out of protected mode depending on how you set them. Because that was a thing that was difficult to explain to people we ended up and by we I mean I had the browser throw an exception when it read the registry and say your protected mode settings are different for these zones. You need to set them all the same. So we would throw an exception but that introduced another layer of problems in that some people can't change the settings on their browser because they're locked down by their IT department for some unknown reason. It boggles the mind that they're not able to set the settings on their own machine. But so we added a capability that bypasses the registry check for people in that instance or in that who are in that case who can't change their protected mode settings but still need to run the Internet Explorer driver. We tried really hard to make this capability in the language bindings scream out that this is something you should never use. The name in Java the name of the capability is introduce flakiness by ignoring security zones. You're actually saying I'm going to introduce flakiness in my test. In the .NET bindings the capability is introduce instability. I mean we've actually tried to make it blatantly obvious blazingly clear that you should never use this capability unless you absolutely have to and if you have to realize that you're just asking for trouble to come with Internet Explorer the right way to handle it is set your protected mode settings to the same for all zones and that's just the only way that is truly supported for Internet Explorer. There's one other case that we might have some challenges with sort of losing the connection to the browser and that was introduced by Internet Explorer 11. There are some instances where the protected mode boundary can be crossed in IE 11 even if you have the protected mode settings set properly and there's a registry key you can set to prevent that from happening that's documented on our Wiki page for Internet Explorer for configuring the IE driver. So I hope that at least gives you some places to look and I really want to make clear the background of it seems arbitrary why should I have to mess with my protected mode settings well there's a very good technical reason why and that's it because otherwise we do lose the connection to the browser when you cross the protected mode boundary. There's a gentleman at the back in a green top who had his hand up Yes if you're super shouty oh have you got a microphone? No, okay just shout okay so to repeat the question Chrome has an option in its developer console that allows you to emulate a mobile phone in Chrome would we expose that and the second one was is it safe to do mobile testing using a desktop browser? First one I'm not sure I can't see why not but it would be through a capability that you pass to the Chrome driver and the Chromium team own the Chrome driver right this is one of the interesting and exciting and potentially frustrating things is that as browser vendors take ownership of their own drivers we get less ability to go like oh yeah definitely yeah we'll do that on the other hand the browser vendors really do want you to have an excellent experience automating on their browsers and so they're pulling their things out they're doing an excellent job so if you file a task and ask they may or may not do something and you can do that on the Chrome driver project page second question is it a good idea to test mobile on a desktop browser it depends on the level of fidelity that you're after if it's a does it render nicely in a screen this size sure why not if it's will this work in the browser on a device I don't know you might be comfortable you might be using light layers like GWT or jQuery or XJS which paper over the cracks and give you a consistent experience between devices and therefore if it works on the size screen it should be fine but then if you're using Chrome you could probably spin up an x86 Android emulator instance enable the Chrome web view stuff and use the same Chrome driver to drive the web view there so you've given yourself an artificial constraint which doesn't need to be in place does someone else want to add something to that yeah one of the things that would not be representative is going to be performance right going to be running on a full desktop environment with multiple cores and multiple gigabytes of RAM and that will not be representative of a mobile device on a 3G connection with limited resources and battery power so keep that in mind regarding exposing that the Chrome options are really extensive in those high capabilities so you may be able to make it happen with things like flags to start Chrome it depends on how you're using it but you may be able to hack it with tools that already exist someone's coming up give him a round of applause so yeah just to answer your question actually I already did this thing usually in the developer toolbar there are three options which Chrome gives to simulate the geolocations to simulate the screen size the viewport size and the third one is simulate the user region so I think these are the three things which are really important and you can also control the user region so what we did so in the Selenium you can easily use the options to set the user region to any user region and you can also play around with the viewport size we have a driver managed API so you can change the screen size so if your website is responsive it will exactly looks like the way it looks like on a mobile browser but for the simulating the geolocations you can use profiles in Chrome so yeah so we are doing this so it exactly the website looks like a mobile browser so yeah this way you can utilize the Selenium scripts to see whether your scripts work on a responsive UI which looks on a mobile browser there's a service out there too that you could use can I go ahead so I just had a quick it's more of a query so you know that the mobile browsers have a new version of a mobile browser so what would be your first thought when you know that a new version of a mobile a browser is coming up I'm sorry can you repeat that I'm not quite sure I understand the question so my question was like there's a new version of a browser that's coming up every month so what would be your first thought when you know that another version of a browser is going to be launched so you're asking what our approach is with new versions of browsers that come up you mean like for example a new version of Firefox that comes out every six weeks or a new version of Chrome that comes out I guess they ship every six weeks and how we approach that or how it would be better for you to approach that what would be your first thought when you know that a new version is coming up what are our thoughts about that yeah in my case you know I it's case by case basis as far as the the browser itself goes depending on which browser it is for Chrome I get less concerned about Chrome shipping a lot because it's really hard not to be on the most recent version of Chrome you've got to go through some hoops in order to not have Chrome auto update itself so you're almost always running the latest version Firefox I we have some challenges with Firefox because of the architecture of the Firefox driver and it requires a binary component that is based on the Gecko SDK that's tied uniquely to the version of Firefox that's being released and so there are challenges associated with that that should be mitigated largely when you've heard people talk about Mary Annette over the course of the last couple of days which is the next Firefox driver that is owned by Mozilla that's provided by Mozilla that would mitigate a lot of those pain points for us Internet Explorer has a pretty slow release cycle so they don't update nearly as often so I don't see that as a real there's some scrambling to catch up and make sure things work with a newer version of the driver of the browser but in the main there aren't a whole lot of issues with that particular browser anybody else want to I was going to add considering the speed of their release process you would be great if browser vendors provided tooling to actually be able to download or install programmatically their stuff we have projects at Sauce Labs it's our job to always give you the latest browsers and it's a really really complicated task to get the right installer and automatically install it in your virtual machines it's been a lot of work to get that down and I would love it if the vendors would actually provide this tooling for everyone to consume and not just have to hack it and get it started in different parts I noticed that the time has crept by or lept by actually to be more honest it's gone really fast for us up here it's now about 10 o'clock and I think the session was meant to finish at 10 so we're going to be around for the rest of the day I guess you are as well you'll be able to come ask us questions talk to us if there's something we get to that you want to then do come and have a chat most of us are lovely people thank you very much for listening guys