memaiya
memaiya

Reputation: 91

The element is obscured(Server did not provide stack information) automation in edge browser with selenium

org.openqa.selenium.WebDriverException: Element is obscured (WARNING: The server did not provide any stacktrace information). This code is working fine for chrome and firefox but not with edge browser.

     `public class Login {
            public WebDriver driver;
            By userName = By.id("ctl14_UserName");
            By password = By.id("ctl14_Password");
            By login = By.id("ctl14_LoginButton");

            public Login(WebDriver driver) {
                this.driver = driver;
            }
            // Set password in username textbox
            public void setUserName(String strUserName) {   
                driver.findElement(userName).sendKeys(strUserName); 
            }
            // Set password in password textbox
            public void setPassword(String strPassword) {
                driver.findElement(password).sendKeys(strPassword);
            }
          public void clickMyaccount(){
               driver.findElement(myAccount).click();
            }
        // Click on login button
            public void clickLogin() {
                driver.findElement(login).click();

            }
        }
        //Test class
        public class AdminLogin extends BaseForDifferentLogins {
                 Login objLoginAdmin;
                 @Test(priority=0)
                    public void login() throws InterruptedException{
                      objLoginAdmin=new Login(driver); 
                      objLoginAdmin.clickMyaccount();
                        Thread.sleep(3000);
                        objLoginAdmin.setUserName("superuser1");
                        objLoginAdmin.setPassword("superuser1");
                        Thread.sleep(3000);
                        objLoginAdmin.clickLogin();
                        Thread.sleep(3000);
                    }
        }`

Upvotes: 9

Views: 11527

Answers (8)

s.Hakki
s.Hakki

Reputation: 1

Even I faced same problem today running tests on Edge, But when I observed the problem, after which step it's failing just check it up, after that step give a time delay of 5 to 10 seconds, by doing this it solved my problem. And i got the same error many times while running in Edge at different part of my program, i just added time delay at all those steps, it solved my problem and now test successfully running on EDGE.

I added delay by using

Thread.sleep(5000);

just try this, if it doesn't work for you, I found one other solution if it's failing at the time of clicking, that is perform click operation using javascript.

WebElement element = driver.findElement(By.id("gbqfd"));
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", element);

This solution I got from https://softwaretestingboard.com/qna/363/word-around-for-edge-driver-click https://softwaretestingboard.com/qna/745/excpetion-selenium-webdriverexception-element-obscured

First one worked for me.

Upvotes: -1

Pranjay Kaparuwan
Pranjay Kaparuwan

Reputation: 921

You can perform the task with the Action chains in the python specially with Edge browser:

from selenium.webdriver import ActionChains
actionChains = ActionChains(driver)
button_xpath  = '//xapth...' 
button = driver.find_element_by_xpath(button_xpath)
actionChains.move_to_element(button).click().perform()

But sometimes Action chain does not finds the DOM element. Hence better option to use execute_script in following way which is compatible with all browsers:

button_xpath  = '//xapth...' 
button = driver.find_element_by_xpath(button_xpath)
driver.execute_script("arguments[0].click();", button)

Upvotes: 0

Naya
Naya

Reputation: 1

public void clickUntillNotObsecured(WebElement elementToClick) {
    boolean obsecuredThrown = true;
    int c=0;
    while (obsecuredThrown && c<30) {
        try {
            clickOnElement(elementToClick);             
            obsecuredThrown = false;
        } catch (WebDriverException e) {
            obsecuredThrown = true;
        }
        c++;
    }
}

Upvotes: 0

M Mannanikat
M Mannanikat

Reputation: 1

Resetting Zoom level to 100% will fix the issue.

Upvotes: 0

Dudar
Dudar

Reputation: 748

I have also encountered this problem while testing Angular with Protractor in Microsoft Edge. What finally helped me was combining two workarounds:

  1. Set browser zoom value to 100% explicitly in beforeEach function: browser.actions().keyDown(protractor.Key.CONTROL).sendKeys('0') .keyUp(protractor.Key.CONTROL).perform();

  2. Do click through browser actions: browser.actions().mouseMove(yourElementThatIsNotActuallyObscured).click().perform();

Upvotes: 0

Mark Duivesteijn
Mark Duivesteijn

Reputation: 183

I encountered the same issue on the Edge browser. It was difficult to figure out what was actually wrong, since the issue seemed to appear/disappear from time to time in my case. So at some point I decided to contact MS and created this ticket question

Here Steven K mentioned that the obscured element error is most likely due to zoom level not being at 100% So I checked and indeed it was at 125% for some reason. After I set it back to 100% the issue was resolved for me.

browser.send_keys [:control, '0']

I know this is a ruby+watir example, but I'm sure there is a similar Java trick for this.

Upvotes: 1

Mindaugas Bernatavičius
Mindaugas Bernatavičius

Reputation: 3909

I have encountered the issue and tried several things to solve it:

  • enabled EdgePageLoadStrategy.Normal - did not help;
  • disabled the "save your password?" bubble. - did not help;
  • normalized the zoom level to 100% - bingo / eureka. This solved the issue.

My test script is a bit more performance-oriented, so I had no desire to add additional objects / capabilties / options. If you want your test to be more deployable add registry editing capabilities to your selenium script. This can be a starter: http://www.winhelponline.com/blog/microsoft-edge-disable-zoom-reset-zoom-level-every-start/

Upvotes: 6

Amit Pe&#39;er
Amit Pe&#39;er

Reputation: 193

Instead of using webElement.click() you can try to build Actions with click and do perform. Had the same issue on Edge and that did the trick for me:

Actions actions = new Actions(webDriver); actions.click(webElement).perform();

Upvotes: 8

Related Questions