I am using selenium webdriver to do automation of web application.(I am using eclipse)
In my test, I have written the code to login the page by credential, then click some links and go to a particular page.Now on that page i am filling fields through drop down and all and its not working.
So My question is if i changing my code to work with drop down,then to test this again i need to run test case from starting.Means again it it will login page will load and go through various links and then reach to that page.
So can not directly execute that steps only like we do in selenium IDE???
Again and again executing from starting is really screwing my time...??
Is there any way/shortcut?? Please suggest me.
Thanks
Selenium IDE is in-browser, it's then normal you can run at any step. But if your cookies have expired, you'll have to reauthent. It's not a Selenium problem, it's how websites work.
In your tests, you'll always have to start from scratch if your cases involve athent process, unless you manage to get a fine control over your cookies.
You can always make a quick http call to the website you want to connect to with HTTPClient for example, just to get the cookie back, then use it in webdriver with something like
driver.manage().addCookie(new Cookie("foo", "bar", "www.domain.com", "/", null));
then go to the page you need. Notice that this solution solves the Authent problem only, and does not control the state of the tested web-application (data previously posted, etc...).
At our company, we make an extensive use of selenium, and have a lot of tests relying on it, it's therefore a problem we know something about and we are aware of the frustation it can cause.
We use a pretty different solution to get a productivity boost on tests.
In fact, we're using a Groovy Shell-based solution which allows us to go back and forth while developping the tests and keep our browsers open. Groovy is a JVM scripting language that is really easy for a Java dev (almost all Java code is valid Groovy code) and it's really dynamic.
So you can download groovy, run groovy shell (groovysh is the command), then line by line you can launch and interact with the browser xhile your written code is saved to a buffer. When you've done with your test, export the code and put it in Eclipse. It's faster than restarting every time from scratch. Magic lines for starting with selenium are
groovy.grape.Grape.grab(autoDownload: true, group : 'org.seleniumhq.selenium', module : 'selenium-firefox-driver', version : '2.37.1')
import org.openqa.selenium.*
import org.openqa.selenium.firefox.*
driver = new FirefoxDriver()
driver.get("http://my-website.com")
From this point, the browser window is always open, and you develop right in groovy (or java). It's like a selenium-ide, but in groovy, and can be integrated in your developement workflow (but there is a bit of work to do)
This example works for Firefox (as you've probably guessed ;-)) but you can adapt it as you like. We have from this constructed a bunch of tools to develop our tests quickly and iteratively. We found this to be a great savior.
In the case you described, the tests will always return to step 1, therefore, you need to execute your automation suite from the beginning.
Tip for the future, separate your test cases to shorter ones (as Alexander suggested), so you if you need, you can easily use only the cases that needed and relevant to the module you currently working on.
There is nothing different answer..runs from first step...
And my kind advice is that to use a break point in eclipse at which u r guess of failing...and run the eclipse program in debug mode vth continuously pressing F6 key.
The excecution will be slowed and display will be step by step mode which u can easily trace the exact location at which u r code is breaking...
Related
I wanted to use the Monaco Editor for my project and I want to run the server side languages like C# or node in my Monaco editor(https://github.com/Microsoft/monaco-editor/) which is a open source editor from Microsoft.
Here are few examples for that.
https://microsoft.github.io/monaco-editor/playground.html#interacting-with-the-editor-rendering-glyphs-in-the-margin
https://dotnet.microsoft.com/languages
If you see the the above examples you can see they are running c# with run button I wanted to implement same functionality.
I know that I need to install run time for particular language like C# and I have that in my local machine but still I am not able to run it.
Any help will be highly appreciated.
What you see there is not a Monaco feature and is up to you to implement. How you do that, will depend largely on the language you're trying to run.
The first example (and jsFiddle and CodePen and many others) simply displays an iframe to show the result. That iframe loads a file with a unique name that contains the HTML, CSS and JavaScript code entered in the editor. You can confirm that this is what they're doing, using Chrome Dev Tools.
If you're going to run a language like C#, know that you will need full control of your web server. The flow will be something like this:
The user presses the Run button.
You call a web service (that you must develop), passing it the C# code and anything else needed to build a working project (like dependencies).
The web service creates the project from those inputs, invokes the C# compiler, runs the resulting executable, and finally captures the output (both stdout and stderr) into string variables. Those strings are returned by the web service.
Back in the browser, you display the output from the web service.
This is very doable, but getting it to perform well when your volumes pick up will be a special problem.
With Pry (but also with Rubymine), I'm trying to debug a certain point in the code (using binding.pry). After calling Capybara's save_screenshot, I'm unable to execute any Capybara related commands (all commands die on time-out). This works out of a "debug mode" and in other web-drivers like Poltergeist.
I took a couple of hours today trying to debug it. I think I found the problem - or at least a way around it.
Our web site has a couple of links that open content in another browser window. Since the automation is quite ancient, and in that time Selenium didn't have a decent way to switch window-context, what we do is to visit the opened page by URL, and by this keep only a single window open at any given time.
This works, but something strange happens when running this test on "debug mode" (using binding.pry for example). Right before we do any actions on that specific page, we take a screen-shot using Capybara's save_screenshot method. On debug this results a corrupted image, and any following Capybara methods will fail on time-out. Opening this page using the link, and handling the windows context switching with Capybara's handle_window method solves the issue. It's still a mystery why it only happens with Capybara wekit though (as other web-drivers work properly). I'm guessing that perhaps the DOM might be structured differently.
I'm still studying for my computer science degree and have mostly focused on the mathematics side of things for now. However, in my current job I am working with Selenium IDE (specifically because it doesn't require coding knowledge) and I'm having a bit of trouble:
I need to test a Shift + click as well as a cherry-pick (Control + click) command on the web-based software we are creating, but it's not working. Manually pressing control and then clicking different elements on the screen works fine, however.
Like I said, I'm using Selenium IDE 2.9.1, and I'm using it on Firefox 50.0.2 on a Windows 10 install. My commands on that section are as follows:
Screenshot of the IDE command
The idea, obviously, being to select the object named Field1, depressing the Ctrl key, selecting the object named Field2 and then releasing the Ctrl key. This should, theoretically anyway (and does work when done manually outside of the IDE), select Field1 and then cherry-pick Field2 from the list as well.
This, however, is not the case, and it doesn't work.
Can anyone, please, advise me on how to proceed here? Should the commands be structured differently? Am I using the incorrect commands? Is there something else I can try?
As a PS: The same issue persists with the shiftKeyDown command as well.
I have searched for this issue online and found no help that actually works for me yet, hence this post.
I am looking forward to your replies, in the hope that I can find success... :)
I think that it is a Selenium IDE original command problem.
When you tried to simulate pressing Ctrl key and used "controlKeyDown/Up" command, it just changed the boolean value and did not fired a real key down/up event. Also Shift and Alt key could not work.
Maybe you should try to add a "keyDown/Up" command after "controlKeyDown/Up" command and the target could be //body .
And, if you need, please try to use the tool, SideeX, the extended version of Selenium IDE. Maybe this problem will be solve in the future and make the test case flexible. Here is the link to SideeX and there are more details about the tool.
OK, I found the solution.
When compiling the tests I test them by running through them step by step to ensure that everything is working like it should, before saving it to a test suite and letting it run on it's own. Now, this involves me double-clicking every command in the Table one by one, in sequence, and keeping and eye on the screen to ensure that it executes and behaves exactly like I want it to. Simple, understandable, logical, correct?
Well, it seems like the controlKeyDown and controlKeyUp commands DO NOT WORK in this way.
I built a bare-minimum test case using only the 4 commands: click the element, controlKeyDown, click the next element, controlKeyUp. I ran through the test a hundred times with no success, but then I started thinking - what if the controlKeyDown command is never released? That would cause issues outside of the test (on the rest of the environment, obviously), since the Ctrl key would be permanently depressed. So I figured that the Selenium IDE either 1. Releases the key in a short amount of time automatically (faster than I can execute the command to click the next element manually) or 2. It simple ignores the controlKeyDown command if it's not run in a complete test case/suite.
So I took the 4-line test case, built up a test screen with test grid elements and ran the test case - and it works. Perfectly, actually.
So, in case anyone has similar issues in the future, try to RUN the test case instead of clicking through it or executing commands manually.
I use Protractor 3.0.0 to measure UI performances of a web app.
I need to launch my test suites on a virtual machine running on Windows Server 2012. They run perfectly on my personal computer, but on the VM the tests go crazy:
My tests don't always properly click on dropdown menus (e.g. my debug messages indicate that the click on the logout link in a dropdown menu was successful but nothing happens)
When filling text fields A and B with values "valueA" and "valueB" in a form, the tests sometimes sends "valueAvalueB" in the field B
I tried launching tests with PhantomJS, and I still have the same problem with dropdown menus (I didn't check the values of text fields yet). In addition, the performance measurements seem to be too optimistic.
Does anyone encountered the same problem? I couldn't find anything describing that kind of problem...
I launch my tests directly from the VM (not using remote WebDriver or something).
Ok Link Pham this is what I feared... Headless browsers could fix the issues, but we want to measure times spent displaying items and refreshing them. Headless browsers could give too optimistic results (as I observed with PhantomJS when I gave it a try). I will try with headless Chrome.
I guess I will have a bunch of other questions, but your answer properly covers the scope of this specific question so I will close it. Thank you again .
I am using Eclipse Kepler Service Release 2 , EPIC 0.5.46 and Strawberry Perl 5 version 18 for perl programming. For debugging I am using Eclipse debugger and PadWalker .
I have an interactive perl program that writes to files based on answers provided by the users to multiple prompts. While debugging , every time i change a single line of code I have to rerun the whole program again and provide inputs to every prompt , which is really time consuming.
Is there a way to make changes to the code in a sub routine , in the middle of debugging session such that the instruction pointer resets itself to the first line of that sub routine. This way i do not have to restart the session to recompile the new code.
Appreciate your inputs and suggestions. Thank You!!!
What you want to do can be done, and I've done it many times in Perl myself. For example, see this.
However although what you describe may work (and is a bit dangerous), the way it is generally done a bit different and safer.
First one has to assume a regular kind of command structure like a command processor, or say a web server.
In a command processor or web server, you read a command (or get a web request), perform an action, then read another command, perform another action and so on. From your description, it sounds like you have such a structure.
In my case, I have each debugger command stored as in Perl file. This is helpful not only for facilitating this task, but also for understanding, testing and changing the code.
Given this kind of program structure, instead of trying to change the program counter, you complete the command and at the level where you are about to read a new command, you make the change and then reload the file which changes the code.
The specific Perl construct to do this is called do. Don't use require or use which will load in a Perl file only if that file or module hasn't been previously loaded. In your situation, you want to reload even if it has been loaded before.
So now how do you get to be able to issue a do command? As you suggest, you could do it through a debugger. Assuming you have this overall program stucture as described above, you put the breakpoint somewhere a common point in the caller which loops over things to process, rather than try to change things in indvidual commands.
And you don't even need a debugger to do this! Many web frameworks like Ruby on Rails, have a "development" mode where they save timestamps on files that implement functionality. If the file has changed they issue the "do" command before running the request.