javaseleniumselenium-webdriversapwebui

Selenium Webdriver - Unable to find element after page refresh/redirect


I am trying to write some UI test cases for an SAP-webUI (web based) application. After login, it shows the dashboard ( Workcenter's ) screen.

Now the problem is, I am able to open the page, enter U/N, Pwd and login through Selenium. After i press the "Login" button the URL changes and the page got redirected/refreshed.

E.g. URL before login : https://a/b/c/d/e/f/g.htm?sap-client=001&sap-sessioncmd=open

E.g. URL after successful Login : https://a/b(bDsdfsdsf1lg==)/c/d/e/f/g.htm

After this im unable to perform any action or press any link in any part of the page. I tried with all the possible attributes ( css, xpath, id ). Webdriver was unable to find any element on the page. It shows the error "No element found" alone.

I am using java with Selenium Web Driver.

Please find the html structure of the webpage below

<html><body><div><div><iframe>#document<html><head></head><frameset><frameset><frame>#document<html><head></head><body><form><div><div><table><tbody><tr><td><div><ul><li><a id=abcdef></a></li></ul></div></td></tr></tbody></table></div></div></form></body></html></frame></frameset></frameset></html></iframe></div></div></body></html>

Actually i want to click a linkmenu "abcd", which is inside iframe and frame as shown in the below HTML code

<html><head></head><body><iframe name=a1><html><head></head><frameset><frameset name=fs1><frame name=f1><html><head></head><body><table><tbody><tr><td><ul><li><a id=abcdef>

I tried the below code as well.

driver.switchTo().frame("a1"); driver.findElement(By.id("abcd")).click();

OR

driver.findElement(By.xpath("//*[@id='abcd']")).click();

After using the above code, still im getting the error "No such element"

Kindly suggest

Regards, Siva


Solution

  • Do it this way...

    driver.switchTo().frame(driver.findElement(By.xpath("//iframe[@name='a1']"))); // switching to iframe

    followed by

    driver.switchTo().frame("f1"); // switch to frame

    and then your desired action...

    driver.findElement(By.id("abcd")).click();