I'm trying to automate a web application's ui-tests by using Groovy, Maven, Geb and Spock. I've a page that shows confirmation pop-up to ask user "Are you sure? -Yes -No" after clicking a button on the page. I am able to click the button on the page and I also need to click to "Yes" button which is in the pop-up window. When I inspect the "Yes" button on Google Chrome it looks available, so that I used its name like this on page:
MyPage.groovy
import geb.Page
class page extends Page{
static url = "myPage"
static at = { waitFor { title == "My Page" }}
static content =
{
confirmBtn {$("input[value*='Confirm']")}
yesBtn {$("input[value*='Yes']")}
}
}
This is what I tried to click "Yes":
MySpec.groovy
import geb.spock.GebSpec
import MyPage
class MySpec extends GebSpec{
def "Confirm"(){
given:
def page = to MyPage
when:
go MyPage
page.confirmBtn.click()
yesBtn.click()
then:
...
}
}
As a result it gives me the following exception:
org.openqa.selenium.ElementNotVisibleException: Element is not currently visible and so may not be interacted with
How can I click that "Yes" button, do you have any suggestions?
EDIT:
I debugged the code by adding the following lines before clicking the button:
waitFor { yesBtn.isEnabled() }
println "isDisplayed: " + yesBtn.isDisplayed()
println "isEnabled: " + yesBtn.isEnabled()
But whether I waitFor button to get enabled or displayed or not it always prints:
isDisplayed: false
isEnabled: true
And after reading this post I got the idea that dom needs to get refreshed somehow.