Ayub Malik
Ayub Malik

Reputation: 2578

SafarDriver Selenium Page title is incorrect after loading new page

I have a Selenium 2 test that uses a login form and then asserts that the login has succeeded by verifying the page title has changed.

The test is written in Java/JUnit, WebDriver and Fluent Selenium

fwd.title().within(secs(5)).shouldContain(partialTitle);

The tests work on Firefox and Chrome. On Safari the page title is still the old login page title.

The screencast we have generated shows that the URL after a successful login has changed, but the title hasn't.

I think the SafariDriver is not waiting for the page load event to complete before the assertion.

Upvotes: 1

Views: 736

Answers (2)

ninja
ninja

Reputation: 387

I use GEB + SPOCK and with safari driver there is a "know issue" about implicit/explicit wait (ref. https://code.google.com/p/selenium/issues/detail?id=5860).

So, a nice workaround for make test runnable on Safari browser is to wait for page title:

static at = {
     waitFor { title == "Homepage" }
}

This will force the driver to wait until title change (the timeout is configurable).

Upvotes: 0

ninja
ninja

Reputation: 387

I have the same issue!!! My test fail because title is used for checking test "Step".

With Firefox and Chrome no problem; with Safari it's a problem!!!

I found this "hack" that work, but it's necessary to manually check the title after each "click":

def static void waitForPage(driver, String title) {
    //Hack to make login working on Safari&IE
    (new WebDriverWait(driver, 10)).until(new ExpectedCondition<Boolean>() {
        public Boolean apply(WebDriver d) {
            return d.getTitle().startsWith(title);
        }
    });
}   

Upvotes: 1

Related Questions