ldaume/headless-chrome

Getting ElementNotVisible exception when clicking on an element present in a new tab

snpanigrahi9 opened this issue · 5 comments

package demo1;

import java.util.ArrayList;
import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

public class Headless {

public static int intIndex = 0;
public static void main(String[] args) throws InterruptedException
{ 
	
	System.setProperty("webdriver.chrome.driver", "C:\\workspace\\Demo\\chromedriver.exe");
	ChromeOptions chromeOptions = new ChromeOptions();
	chromeOptions.addArguments("window-size=4000,3000");
	chromeOptions.addArguments("--headless");
	WebDriver driver = new ChromeDriver(chromeOptions);
	driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
	driver.get("https://qa.penproplus.com/Manager/SignIn.aspx");
	Thread.sleep(10000);
	System.out.println(driver.getTitle());
	Thread.sleep(5000);
	driver.findElement(By.cssSelector("#pnlLoginPanel_txtUsername")).sendKeys("");
	Thread.sleep(5000);
	driver.findElement(By.cssSelector("#pnlLoginPanel_txtPassword")).sendKeys("");
	Thread.sleep(5000);
	driver.findElement(By.cssSelector("#pnlLoginPanel_lblSignInTitle")).click();
	Thread.sleep(5000);
	//String text = driver.findElement(By.cssSelector("#ctl00_headerUC_lblSignOut")).getText();
	//System.out.println(text);
	driver.findElement(By.xpath("//*[@id='ctl00_cphTopCtrls_lblPlanParms']")).click();
	Thread.sleep(10000);
	 ArrayList<String>tabs = new ArrayList<String>(driver.getWindowHandles());
     intIndex= tabs.size();
     System.out.println(intIndex);
    //(this.strLocator.split("=")[1]).equalsIgnoreCase("TabId");
     int TabId=intIndex-1;
     System.out.println(TabId);
	driver.switchTo().window(tabs.get(TabId));
    driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"/t");
   // Thread.sleep(15000);
   // WebDriverWait wait = new WebDriverWait(driver,30);
   // wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//span[text()='Configuration']"))).click();
    //driver.findElement(By.xpath("//span[text()='Configuration']")).click();
    driver.findElement(By.xpath("//span[@id='ctl00_cphMainContent_ucPlanClientTools_PanelBox2_Label2']")).click();
    Thread.sleep(15000);
    driver.findElement(By.xpath("//*[@id='ctl00_cphMainContent_ucPlanClientTools_PanelBox2_configuration_pnbConfiguration_lblCloseAll']")).click();
    Thread.sleep(15000);
    String plan  = driver.findElement(By.xpath("//span[text()='Copy Plan']")).getText();
    System.out.println(plan);
    
	} 		
}

console error:

Starting ChromeDriver 2.31.488763 (092de99f48a300323ecf8c2a4e2e7cab51de5ba8) on port 6497
Only local connections are allowed.
Aug 09, 2017 5:24:48 PM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: OSS
PenProPlus - Sign In
2
1
Exception in thread "main" org.openqa.selenium.ElementNotVisibleException: element not visible
(Session info: headless chrome=60.0.3112.78)
(Driver info: chromedriver=2.31.488763 (092de99f48a300323ecf8c2a4e2e7cab51de5ba8),platform=Windows NT 6.1.7601 SP1 x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 24 milliseconds
Build info: version: 'unknown', revision: 'unknown', time: 'unknown'
System info: host: 'AINDLPB3RCTM', ip: '10.209.154.42', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.8.0_102'
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities [{applicationCacheEnabled=false, rotatable=false, mobileEmulationEnabled=false, networkConnectionEnabled=false, chrome={chromedriverVersion=2.31.488763 (092de99f48a300323ecf8c2a4e2e7cab51de5ba8), userDataDir=C:\Users\A0705286\AppData\Local\Temp\1\scoped_dir31376_15344}, takesHeapSnapshot=true, pageLoadStrategy=normal, databaseEnabled=false, handlesAlerts=true, hasTouchScreen=false, version=60.0.3112.78, platform=XP, browserConnectionEnabled=false, nativeEvents=true, acceptSslCerts=true, locationContextEnabled=true, webStorageEnabled=true, browserName=chrome, takesScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true, setWindowRect=true, unexpectedAlertBehaviour=}]
Session ID: 25d91e580691ee116927d1faf3e44d44
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:215)
at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:167)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:671)
at org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:272)
at org.openqa.selenium.remote.RemoteWebElement.click(RemoteWebElement.java:82)
at demo1.Headless.main(Headless.java:54)

@snpanigrahi9 , I think you have multiple elements with given xpath/id on your page and first is not visible.

That's the first idea and it's really difficult without the DOM.

I have got the same problem. With headless I get this problem. What I have seen is that the field at first is not visible. only when you update some other fields a jquery is set to make the css locator visible.
I checked in google inspect and the field is unique

I use the actions object to select the click button. When I do the same test (not headless) then it passes. Should I set it visible somehow via a javascript injection with headless

This is the error I get
org.openqa.selenium.TimeoutException: Expected condition failed: waiting for visibility of element located by By.cssSelector: [id$=wtlnkNewCallVisit] span (tried for 30 second(s) with 500 MILLISECONDS interval)
at org.openqa.selenium.support.ui.WebDriverWait.timeoutException(WebDriverWait.java:80)
at org.openqa.selenium.support.ui.FluentWait.until(FluentWait.java:232)
at org.vopak.performance.selenium.OrderEntryOma.waitForElement(OrderEntryOma.java:152)
at org.vopak.performance.selenium.OrderEntryOma.setupOrderlines(OrderEntryOma.java:88)
at org.vopak.performance.selenium.SignUpTest.signUp(SignUpTest.java:35)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
Caused by: org.openqa.selenium.NoSuchElementException: Cannot locate an element using By.cssSelector: [id$=wtlnkNewCallVisit] span
For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html
Build info: version: '3.3.1', revision: '5234b325d5', time: '2017-03-10 09:10:29 +0000'
System info: host: 'NLAPDDW222', ip: '10.1.78.186', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.8.0_141'
Driver info: driver.version: unknown
at org.openqa.selenium.support.ui.ExpectedConditions.lambda$findElement$0(ExpectedConditions.java:896)
at java.util.Optional.orElseThrow(Unknown Source)
at org.openqa.selenium.support.ui.ExpectedConditions.findElement(ExpectedConditions.java:895)
at org.openqa.selenium.support.ui.ExpectedConditions.access$000(ExpectedConditions.java:41)
at org.openqa.selenium.support.ui.ExpectedConditions$7.apply(ExpectedConditions.java:205)
at org.openqa.selenium.support.ui.ExpectedConditions$7.apply(ExpectedConditions.java:201)
at org.openqa.selenium.support.ui.FluentWait.until(FluentWait.java:209)
... 28 more

ok I was to quick I found the problem what I have. The issue is that my screen was not maximized with headless. the option //chromeOptions.addArguments("--start-maximized") does not work. Therefor it was not visible because the screen was to small to display the item. When I set the window to chromeOptions.addArguments("window-size=1920x1080") in my example it will find my css and headless behaves the same way as normal browsing :)

@ralphvanderhorst I has the same problem, and resolve after using your method. why option //chromeOptions.addArguments("--start-maximized") does not work? It's interesting.