How can i locate element using ngweb driver? - angularjs

I am trying to click a button from a angular page.I am using ng web driver as below:
driver.findElement(ByAngular.partialButtonText("LAUNCH")).click();
//Actual launch button
but it shows no such element how can i proceed to get that element

With the minimal information provided on the question: You might want to switch to the angular frame before finding the element.

With the minimal information provided on the question: You might want to switch to the angular frame before finding the element.
Or try waiting for the page to load completely with SyncPage(); or Thread.Sleep(1000);

Related

Cannot get XPath selector to work using Robocorp Selenium library

I am attempting web automation with a platform called Robocorp using the Selenium library.
When I run my program, I have no issues until I encounter this page where I am trying to get the program to click on the icon that says SQL.
I want the <a> element with the #href attribute.
Here are some (of many) XPaths I have tried that have all failed:
xpath://a[contains(#href,'sql_form.jsp')]
xpath://*[text()='SQL']
xpath://a[#target='frame2]
Snapshot of the element:
I circled the element in red ^^^
I cannot get the selector to be recognized on this page. I have tried adding delays, waiting until the element is active, waiting until the element is visible, etc.
Nothing seems to work.
Here is an image of the elements I am trying to select.
(The link in the href element takes me to the page I am trying to access).
I thought that the third one would for sure work but is still failing.
I am using a platform called Robocorp which only needs the raw selector to work (CSS or XPath)
I was unaware that iframe needed to be handled differently or that it even existed
https://robocorp.com/docs/development-guide/browser/how-to-work-with-iframes
I first needed to switch frames.
To identify the element with text as SQL you can use you can use either of the following locator strategies:
Using Wait Until Element Is Visible:
Wait Until Element Is Visible xpath=//a[starts-with(#href, 'sql_form.jsp') and #target='frame2']/font[text()='SQL'] 10 seconds
Using Wait Until Element Is Enabled:
Wait Until Element Is Enabled xpath=//a[starts-with(#href, 'sql_form.jsp') and #target='frame2']/font[text()='SQL'] 10 seconds
References
You can find a couple of relevant detailed discussions in:
How to click a row that has javascript on click event in RIDE
Robot Framework: Wait Until Element Is Visible vs. Element Should Be Visible, which one is better to use?

Xpath seems to work in the browser but selenium is unable to pick it

On this page "https://www.javatpoint.com/oprweb/test.jsp?filename=htmltable5" the attempt is to pick the first name and the last name if the marks are above 75. Wrote this xpath to find elements which has marks over 75 ".//tbody/tr/td[number(.)>75]" which works in browser but is not found by selenium at runtime. The size of the findElements simply returns 0 and the test fails on putting a wait on condition.
Your xpath looks correct but web table your trying to interact is in frame. You first need to switch into that particular frame before interacting with WebElement inside it.
We can switch into frames using 3 ways.
By Index
By Name or Id
By Web Element
If you search for iframe in html, you will find out frame as id="iframewrapper" and use below code to switch into frame:
driver.switchTo().frame("iframewrapper")
For further details on frames in selenium, kindly refer to this SO thread.

Appium: Element is not interactable error is getting displayed while tapping on the checkbox

Tried: xpath= //*[#id="mktoCheckbox_52362_0"],
Console Error: Element is not interactable.
Tried: Xpath= //[#id="mktoForm_2768"]/div[10]/div[1]/div[2]/div[2]/label,
console error: Element is not interactable.
Tried: xpath= //*[text()='I agree to the '],
clicking on 'License Agreement' link and open pdf file in other tab.
Applied all the above xpath but still got no result. Please provide some solution to this problem.
Assuming you're trying to automate this page: https://info.couchbase.com/couchbase_server_mobile.html
If you want to open the license agreement in a new tab - the relevant XPath would be
//a[text()='License Agreement']
If you want to tick the checkbox associated with the license agreement you need this one:
//input[#name='termsandConditions']
In both case it's better to use Explicit Wait to ensure that the element is clickable prior to attempting to interact with it via i.e. ExpectedConditions.elementToBeClickable() function
Going forward if you're working on mobile automation you can consider using Appium Studio which provides Copy Unique XPath feature, it can make your life easier when it comes to defining an element locator

Selenium Webdriver Firefox clicks but chrome cannot

I am trying to click on element.
First, I need to hover a on menu, then I need to click on 3rd item in a list.
my code:
// open a list
driver.findElement(By.xpath("//li/span")).click();
// click on 3rd item
driver.findElement(By.xpath("//li[3]/a/span")).click();
it is strange because it works fine in firefox, but doesn't work in chrome
#lebs I'm having to write this as answer as I do not have enough rep points to add a comment. You need to provide some more information. What is being output in the stacktrace when running in Chrome? Have you debugged this issue in your IDE? Have you tried a Wait command before attempting to click the 3rd item?
When testing Google Web Toolkit applications, elements can get dropped in the DOM and replaced with virtually identical elements. Perhaps try declaring the element again.
WebElement openList = chromeDriver.fineElement(By.xpath("//li/span")).click();
new WebDriverWait(chromeDriver, 10,50).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//li[3]/a/span")));
WebElement thirdItem = chromeDriver.findElement(By.xpath("//li[3]/a/span")).click();
On a side note, I'd look at using css selectors if you can.

Selenium WebDriver cannot locate element within an iframe, and throws NoSuchElementException

I realise there are several queries on here for this same problem but none of them provide a solution to my particular problem.
I am running a web driver test that tries to fill out a form for a mail website to find postcodes based on address details. I keep getting this error when trying to locate the first text box:
org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":"css selector","selector":"#ctl00_BodyContent_txtBuildingNumber"}
I have used xpath and the id to try and locate the element but I keep getting the error. I can see that this element is present when the webdriver is running and I have been able to locate another text element on the page and enter text, but I keep getting this error for this field and other fields within the frame.
I am guessing that the problem must be to do with the fact that this field is part of an iFrame.
I have used implicit waits within the test but with no success. I still get the error.
By the sounds of it you'll need to first switch to the iframe element that contains the element that you want to interact with. (Although without seeing the relevant HTML this is a bit of an extrapolated guess).
driver.switchTo().frame();
eg:
driver.switchTo().frame(1);
driver.switchTo().frame(driver.findElement(By.id("id")));
When you've finished interacting with the elements within the frame, you'll need to switch back to the main webpage.
driver.switchTo().defaultContent();
Check your xpath .
try to use simple
driver.switchTo().frame(1);
with wait statement.
sorry a little correction the following worked for me
driver.switchTo().frame(driver.findElement(By.xpath("//*[#id='page-15']/div/p/iframe")));
//*[#id='page-15']/div/p/iframe is the xpath of the frame in which the button i was trying to click was located. (driver is of type WebDriver i.e WebDriver driver ) thank you
The following worked for me
driver.switchTo().frame(myd.findElement(By.xpath("//*[#id='page-15']/div/p/iframe")));
//*[#id='page-15']/div/p/iframe is the xpath of the frame in which the button I was trying to click.(driver is of type WebDriver i.e WebDriver driver)
thank you
you can use wait statement and after using the wait statement use simply
driver.swithcTo().frame();

Resources