cypress can't test focus - focus

I am trying to test a keyboard shortcut that set focus on a field, it works on the browser, but cypress seems not to be able to test it.
cy.get('body').type('{alt}E');
cy.get('#fieldId').should('have.focus'); // fails.
In the cypress Chrome, I am unable to set focus on the field, even with the mouse. I click on the field and it just blinks but doesn't keep the focus.
Edited:
I discovered that there is a field stealing the focus. This field gets the focus when the page loads. When the cypress does the test on the desired field, the page is not completely loaded yet. When the page loads, then the focus passes to another field, and the test fails. How can I make cypress to wait until the page end loading to only then make the test on the desired field?

Related

How to make the selenium web driver click on a button which is inside react spotlight (React Joyride)?

I've added a controlled tour in my app using ReactJoyride. At a particular step, the tour will progress only when the 'Ongoing' tab/button is clicked (see image).
This 'Ongoing' button is inside the spotlight.
I've tested this manually and it works perfectly. However, while testing this using Selenium, I can't seem to find a way to click on this button.
I'm getting the following error :
It says that react-joyride__overlay will receive the clicks. But react-joyride__spotlight is a child element of react-joyride__overlay and i've enabled spotlightClicks.
The current code that i'm using is this : (test.rb)
the commented lines of code are the other ways that i've tested. All of them failed.
If you can point me in the correct direction, I would really appreciate it!
The problem here is, your desired element is overlay-ed by other element, so this other element is hiding your element. All you have to do is, you have check whether this overlay is permanent or temporary. If it's temporary, you have to write the code to wait until the other element gets disappeared, If it's permanent, then you have to issue the click on top of the other element so that your desired element would receive the click.
Let me assume your overlay is permanent so try this code
find(xpath: "//div[#class='react-joyride__overlay']").click

UITableView gets muddled when using Ranorex Automation

I am running automated tests on an IOS Application using Ranorex Studio.
The test loads a form, fills it out, and saves it.
I am getting varied results.
Field headings disappear as data is entered.
Data already entered disappears as more data is entered.
On date picker fields, the Done button sometimes disappears.
These problems only occur during automation, but Ranorex maintain that their automation does not change anything within the application.
There appears to be something completely random about what the UITableView decides to show.
Any ideas how I can resolve this?
Example: Section of log
Screenshot before entering phone number
Screenshot after touching phone number field. Note: Field labels & required graphic (a red circle) are now missing.
Snapshot before entering phone number
Snapshot after touching phone number

How to send ENTER key in protractor tests on iOS?

I'm using ProtractorJS (and Appium) to test a website on browsers and devices. One of the tests is to type some text in the search box and then hit ENTER. Here is the snippet from the page object.
page.searchInput.sendKeys("Text");
page.searchInput.sendKeys(protractor.Key.ENTER);
The above two lines work fine on any browser and Android devices. However, the same test fails on iOS because the ENTER key is not sent. In the iOS keyboard the key I have to press is the "Search" one.
The test must trigger the search using the keyboard.
Any ideas on how to send the ENTER key on iOS?
If there is no button on the page, Safari will be stubborn about it and not submit the form. In general, I use the button tag instead of the input tag and have better results, but either way unless there is a submit button on the page, and that button is visible (see this question for reference: How to submit a form when the return key is pressed?), Safari will stubbornly refuse to submit the page. In this case, I would put a submit button on the page even though most users will never use it on mobile. You may have fits getting it past your design department. The other option is to use a blur event and trigger it that way.
You can send just new line symbol \n or create tap by coordinate proportions at the right lower corner of the app.

Entering text in an iPhone app via the Script Editor in Instruments

I'm generating a script in the Script Editor of Instruments by using the Recording Manual User Interface Actions into Automation Scripts feature of Instruments.
Whilst recording the script I can capture taps and swipes but I can't capture text being entered in a form field.
Any suggestions?
The Keyboard isn't technically part of the app, so actions you perform on it won't be captured. After tapping on the form field, insert
UIATarget.localTarget().frontMostApp().keyboard().typeString("Text you would like to type");
before the next action... you may need to add a short delay to ensure the keyboard pops up before attempting to type

Ranorex v5.0 doesn’t click button sporadical

I have a ranorex project, which automated an use case with clicking 5 buttons in an application.
To set up this project I used the record function. I defined some sleep times between the clicks.
The run with the clicks is in a loop, where the loop count is dynamically defined. One button of the five and always the same button, Ranorex "ignores" sometimes. According to the log file, the button is visible and enabled and ranorex also runs the code with the Click(), but the application doesn’t receive the click. Before in code the click is called, I check with an “If” whether the button is visible and enabled - and if the click() is called (or doesn't), I log it to ranorexlog. Sometimes the application is running through and all the clicks work and sometimes this button click is missing one or more times. It doesn’t depend on the sleep time between the clicks, because I tried long and small pause times. It doesn’t depend on the focus of the application, too, because I switched the focus several times.
Does anybody know this problem, workarounds or what I’m doing wrong?
the obvious workaround is to use Mouse.Click("{Button}") with a 0 duration rather than invoking the click event, or if you are invoking the mouse click invoke the buttons click action. (sorry since they are both named Click() i don't know which one you are using).
As to what is happening, from your description it sounds like your script is finding more than one element with the same xpath. This would cause issues with the click event because it may try to click on the element, but it's the first xpath that matches not the second. Are there any optional elements in this sequence of button clicks that appear? for instance a busy spinner with inner text of "OK" that is hidden from view when you are clicking a button on a form with inner text of "OK" would cause two elements to be found if the xpath was looking for an inner text of ok. This element that is causing may not have been caught in the recorder because it might not have been present at the time.
Another possibility if you are using Mouse.Click() (particularly if this is a website)is that it is possible your button is not actually on the screen, I know that should be taken care of by the visible check but it is visible on the dom even though it is not visible on the screen that causes issues.
I highly recommend do not use the recorder to create test suites that need to be re-runnable. It would actually be better to use the spy tool to create a repository or several repositories for the product you are testing, this way you can be sure the xpaths are all unique, which using the recorder there is no gaurantee. You can actually record with the created repository, and ranorex will attempt to find item in the repository before creating a new item, so the recorder will use this repository when creating recordings.

Resources