Ian Richards
Ian Richards

Reputation: 1618

can not click on none visible element

I'm trying to test my angularjs app with protractorjs. I have set up selenium and got the server and runner working. My issue is that when I run my test I get the ElementNotVisibleError. I know that the element I am trying to select is hidden until certain fields have been filled in and this is how I would like this to be kept.

My question is, are there any workarounds to the issue via a call to wait or sleep. I have tried many variations of wait and sleep but with no luck.

My test code is

it('navigates the user to the login page', function(){
    ptor = protractor.getInstance();
    ptor.get('http://localhost:2222/#/page');

    ptor.findElement(protractor.By.input('input.type1')).sendKeys('one');
    ptor.findElement(protractor.By.input('input.type2')).sendKeys('two');
    ptor.findElement(protractor.By.input('input.type3')).sendKeys('three');
    ptor.findElement(protractor.By.input('input.type4')).sendKeys('four');
    ptor.findElement(protractor.By.input('input.type5')).sendKeys('five');
    ptor.findElement(protractor.By.input('input.type6')).sendKeys('six');
    ptor.sleep(5000);
    ptor.findElement(protractor.By.id('clickableBtn')).click();//not visible until above fields populated

}, 1000000);

Message from protractor is

Message:
    ElementNotVisibleError: element not visible

Upvotes: 1

Views: 2337

Answers (4)

bresleveloper
bresleveloper

Reputation: 6070

You can always give it opacity:0

-moz-opacity: 0.00; opacity:.00; filter: alpha(opacity=00);

This should work for all browsers.

Upvotes: -1

Pradeep
Pradeep

Reputation: 63

Using javascript I was able to click

var linkToClick = ptor.driver.findElement(protractor.By.id('clickableBtn'));

ptor.executeScript("arguments[0].click();", linkToClick );

Upvotes: 2

Brantley Blanchard
Brantley Blanchard

Reputation: 1218

yes, WebDriver allows you to execute javascript on elements directly so simply do a javascript .click. You would need to convert to your own language but here is how I did it using C#

        IJavaScriptExecutor js = (IJavaScriptExecutor)driver;
        js.ExecuteScript("arguments[0].click()", element);
        Browser.WaitForPageLoad(driver);

I actually created an extender method so that I simply type element.InvisibleClick(driver) and it clicks on it for me. More on that can be found documented HERE.

Upvotes: 1

Nathan Merrill
Nathan Merrill

Reputation: 8386

If the element is not visible until you have input in all of the fields, it is because of Javascript. You may have to kick off that Javascript by typing Tab or Enter after typing that last field:

ptor.findElement(protractor.By.input('input.type6')).sendKeys(Keys.Tab);

Upvotes: 2

Related Questions