Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Element.Click not executed when using PhantomJS selenium webdriver in .Net

I am using our existing tool that works perfectly using the Firefox and Chrome implementations of the Selenium IWebdriver.

I am now doing some experimentation using the PhantomJS implementation. So far so good. However, as soon as I want to click a button it does nothing.

I can retrieve the element, however, looking closer at its properties the 'Selected' property states the following:

    Error Message => 'Element is not selectable' caused by Request => {"headers":{"Accept":"application/json, image/png","Connection":"Close","Host":"localhost:37704"},"httpVersion":"1.1","method":"GET","url":"/selected","urlParsed":{"anchor":"","query":"","file":"selected","directory":"/","path":"/selected","relative":"/selected","port":"","host":"","password":"","user":"","userInfo":"","authority":"","protocol":"","source":"/selected","queryKey":{},"chunks":["selected"]},"urlOriginal":"/session/fcaf88a0-40b4-11e3-960d-bdce3224aacf/element/%3Awdc%3A1383063211142/selected"}

I would gather this is the cause that my click is not executed, however, I cannot make heads or tails from this error message. using Google did not help either.

Any help would be much appreciated.

Thanks in advance.

like image 440
WietzeVeld Avatar asked Oct 29 '13 16:10

WietzeVeld


1 Answers

We had a lot of similar issues with PhantomJS.

So, couple of steps to figure out what the root cause to it

  1. Set you screen size (as suggested in comments; PhantomJS uses 400x300 by default):

    driver.Manage().Window.Size = new Size(1920, 1080); //Size is type in System.Drawing"
    
  2. Use to verify that your element is actually visible:

    new WebDriverWait(driver,
    TimeSpan.FromSeconds(timeOut)).Until(ExpectedConditions.ElementExists((By.Id(login))));
    
  3. Click on the element with Javascript

    IJavaScriptExecutor js = _driver as IJavaScriptExecutor;
    js.ExecuteScript("arguments[0].click();", buttonToClick); //buttonToClick is IWebElement
    

For Java it would be as follows:

  1. Screen size

    driver.manage().window().setSize(new Dimension(width, height));
    
  2. Verifying element is visible

    WebDriverWait wait = new WebDriverWait(webDriver, timeoutInSeconds);
    wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("LOCATOR")));
    
  3. Clicking with JS

    JavascriptExecutor js = (JavascriptExecutor)driver;
    js.executeScript("arguments[0].click();", buttonToClick); //buttonToClick is WebElement
    
like image 62
Johnny Avatar answered Nov 07 '22 20:11

Johnny