WinAppDriver Appium not finding element visible through inspect.exe - vb.net

I am programming on a WinForms application with a gui built using Visual Basic back in pre 2005. I frequently will have elements that are visible on inspect.exe, but when I am running WinAppDriver and Appium it fails to detect those elements.
This is the error I get.
OpenQA.Selenium.WebDriverException: 'An element could not be located on the page using the given search parameters.'
The error will occur even when my application is the only maximized application. It occurs when I click a button and launch another form. To make sure that it isn't because the elements haven't appeared yet, I have run the command Thread.Sleep(5000) to ensure that the form which is launched has enough time to appear.
This is the line of code attempting to click on the element.
driver.FindElementByAccessibilityId("vlblYVar").Click();
Here is a picture showing inspect.exe clearly finding the element. Any guidance would be greatly appreciated!

Turns out it just takes a significant amount of time for the elements in the window that pops up to be recognizable by winappdriver even if inspect.exe picks it up immediately.
I had to use
var element = desktopWait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.VisibilityOfAllElementsLocatedBy(ByWindowsAutomation.AccessibilityId("vlblYVar")));
desktop.FindElementByAccessibilityId("vlblYVar").Click();
Also I had to use a driver that loads the desktop UI because using my program's driver never found the element which would lead to a timeout.
I have a new issue though. When I have a combo box, the elements in that combo box are found by name with inspect.exe, but winAppDriver can never identify the elements in the combo box.

Related

Tooltip covers the button so I get org.openqa.selenium.ElementClickInterceptedException

I'm using Selenium for integration testing of our web app, and it's been working great up until I got far enough down the sidebar menu. Suddently the Create test would fail with org.openqa.selenium.ElementClickInterceptedException: element click intercepted. Other element would receive the click:
The error was very sporadic - order of tests would affect which test class failed - but finally I figured out the reason is that the tooltip from the most recently clicked menu option covers the button I'm trying to click. Not really sure why sending input to form elements (using WebElement:sendKeys() and org.openqa.selenium.support.ui.Select) does not count as moving the mouse away.
Is there a way to make Selenium work around this, or do we have to turn off tooltips in the test version (for obvious reasons I don't like the idea of running our tests on a custom version of the web app)?

Insight tool shows error icon, but shows message "No failure was detected"

I am using a tool for verifying if app is compliant with windows accessibility feature
Tool web link - https://accessibilityinsights.io/downloads/
Test tool have simple MFC combo box .
Tool says "No Failure was detected",
Insight tool shows a error icon.
Below are steps to get above state.
Launch app
Launch Insight tool
select what to test = element
Mouse hover on combo box
expand the combobox
mouse hover on item
click on brush icon on right
It will enter the state described abovewith no error but with error icon
Isolation:
Issue doesn't repro when "Entire App" is selected.
When "Entire App" is selected, tool does not show any error or any error icon. App pass accessiblity
Question is if this tool is reporting valid error ?
What is the error as tool says " No failure was detected."
What you're seeing here is an artifact of trying to capture a transient state. Combobox content goes away when the combobox closes, and that happens as soon as you start the scan. Accessibility Insights for Windows allows you to trigger a scan using a timer, as documented at https://accessibilityinsights.io/docs/windows/getstarted/automatedchecks/#running-automated-checks-with-a-timer. The "short version" is that you start the timer, then open the combobox while the timer is counting down, and the checks will run when the timer reaches zero. The combobox will still be fully opened at this point, so the tests will apply to the combobox contents.
My personal recommendation is to set the scope to the entire application when using the timer, just because transient controls sometimes have multiple layers and trying to have the scope of just the element can tend to hide children of the layers in question.
Thanks for using Accessibility Insights
--DaveTryon
Accessibility Insights team

Selenium not found element while page is opening in small screen

For our web application I wrote one selenium script, which is working very fine in my office workstation (which has big screen).
When I execute the same script for the same application in my laptop(which has small screen) it is not able to find the element.
Actually when I open the application in my laptop some elements are visible only when I scroll down the page but those element are visible in big screen without scrolling. Application view is automatically adjust as per the screen.
So, for these application how I can write the selenium script so that it will work any kind of screen ?
What do you mean by "it is not able to find the element"? Which error did it show?
In my own experience with automation, in some specific scenarios, the behavior of the app change when the scrollbar appears (for example, when I try to click on an element, it scrolls down to that element, but "jumps up" to the element above it - this I can reproduce manually.)
Some test scenarios are quite sensitive with scrollbar, for example drag&drop.
You should analyse each failed test separately and find a solution for each case.
Selenium cannot find element that is not visible, you must always check if element is visible and if not scroll to this element.
see this question Scroll Element into View with Selenium

Selenium element.click() does not work

Hello: I am using Selenium/Java to grab a PDF from a website. The website does not generate them in advance, but only after I clink on a link. When I do, the web server goes away for a few minutes, and then comes back with the content.
I'm using Firefox, and its built-in PDF viewer. When I click on the download link from the main browser window, it opens another window to receive the PDF content. In a few minutes the child window is filled with the PDF content, and all I need to do is click a download button on the Firefox toolbar, and then press a Save button on the confimration dialog. I have done both of these things, successfully, sometimes.
My problem, sometimes occurs when I execute the code to click on the child window's download button...
WebElement element = driver.findElement(By.id("download"));
element.click();
Sometimes, it just doesn't work. The statement:
driver.findElement(By.id("download"))
...never throws an exception, so it appears to always be successful. Yet, the subsequent element.click() will often not produce the expected results.
I've thrown about 100 darts at this problem, but I can't seem to find one that produces consistent results. I've tried introducing delays, calling findElement several times, trying to use the driver on the child window in ways to confirm its connection to that window (all with positive return values), but nothing seems to help make element.click() on the darn download link successfull.
I have found Selenium to be a rock-solid solution, especially when working through the primary window...it never misses a beat, and I'm really quite impressed about that behavior. This is my first Selenium project, and I hoping someone that has used it a bit more, might have a suggestion for this particular problem.
It's hard to answer this question without additional information about how the child window is populated. If the child window is using javascript to add the button to the page and define its behavior (which is likely), then the element could be actually present on the page when you look for it (i.e. no error will be thrown), but it might not be active yet or prepared to be clicked.
It might be a good idea to look at the element definition in the source for the child page to get a better idea of how the button is coded. If you have access to the web developers who designed/implemented the button even better. If you can wait to perform the click action until the button is in the desired state, this should solve the problem.
Additionally if the page is coded using a dynamic framework like Angular, you might be better off using Protractor for testing, which is based off of Selenium, but which is aware of updates in the view as they are occurring.

Move target out of bounds exception

I am writing tests for a web application and all went well until I had to choose an option from a menu and that option displays a drop down list when hovered or clicked. When I click an option from the drop down list, I get the following error:
MoveTargetOutOfBoundsException: Element cannot be scrolled into view
Does anyone know what this error is about and what I should look for in my code?
Selenium version 2.25.0, java version 1.6.0_31
I've been checking some selenium and google groups regarding this issue in older versions https://groups.google.com/forum/?fromgroups=#!topic/selenium-users/EuZ7a6_lB9Q
http://code.google.com/p/selenium/issues/detail?id=3075
http://code.google.com/p/selenium/issues/detail?id=4102
a more recent discussion
Is it a known issue for Selenium 2.25.0 or is there a way to fix it? I recently upgraded to Firefox 15.0 :|
Note: I found a temporary solution until someone magically fixes this...since I can't find where the problem is...
I run the code before that point where it crashes, I put it to sleep for 10 seconds, I manually click the menu and the option from the drop down list, the window I want is displayed and the code continues with actions from that point. It works for now...I hope this will be fixed since I can't believe that I can run a script in Selenium IDE but I can't run my java code in WebDriver ...this is crazy :|
I guess you are trying to click an element from a dropdown.
You should keep in mind, that Selenium helps you replicate exact human behavior. So if the code fails because the element is not visible, it is probably because the element is not visible.
To make it work, you might want to put a click command on the menu before the failing bit of code.
(to replicate the sleep 10 seconds manually click the menu button method you are using)
Once again, if you can show us your code and also the HTML snippet of the Menu section, we can provide an exact solution.
Maybe you're opening new popup window while opening select box.
This may help you:
WebDriver.FindElement(By.Id("someInputBox")).SendKeys("hello");
(IJavaScriptExecutor)WebDriver).ExecuteScript("document.getElementById('windowOpener_Button').click();");
WebDriver.SwitchTo().Window("newDisplayedWindowPopupName"); // continue to test