5
votes

I am trying to run a selenium webdriver code on Firefoxdriver but at the run time i am getting an exception --

log4j:WARN No appenders could be found for logger (org.apache.http.client.protocol.RequestAddCookies).
log4j:WARN Please initialize the log4j system properly.
Exception in thread "main" org.openqa.selenium.ElementNotVisibleException: Element is not currently visible and so may not be interacted with
Command duration or timeout: 15 milliseconds
Build info: version: '2.42.2', revision: '6a6995d', time: '2014-06-03 17:42:30'
System info: host: 'Admin-PC', ip: '192.168.2.5', os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.7.0_65'
Session ID: 826ebd51-0bc9-4900-b0ef-d68279bd19fe
Driver info: org.openqa.selenium.firefox.FirefoxDriver
Capabilities [{platform=XP, databaseEnabled=true, cssSelectorsEnabled=true,javascriptEnabled=true, acceptSslCerts=true, handlesAlerts=true, browserName=firefox, webStorageEnabled=true, nativeEvents=false, rotatable=false, locationContextEnabled=true, applicationCacheEnabled=true, takesScreenshot=true, version=31.0}]
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:204)
at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:156)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:599)
at org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:268)
at org.openqa.selenium.remote.RemoteWebElement.click(RemoteWebElement.java:79)
at ResumeUpdate.Screen_1_Monster.operation(Screen_1_Monster.java:20)
at ResumeUpdate.Screen_1_Monster.main(Screen_1_Monster.java:47)
Caused by: org.openqa.selenium.remote.ErrorHandler$UnknownServerException: Element is not currently visible and so may not be interacted with
Build info: version: '2.42.2', revision: '6a6995d', time: '2014-06-03 17:42:30'
System info: host: 'Admin-PC', ip: '192.168.2.5', os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.7.0_65'
Driver info: driver.version: unknown
at <anonymous class>.fxdriver.preconditions.visible(file:///C:/Users/Admin/AppData/Local/Temp/anonymous2662838285289924370webdriver-profile/extensions/[email protected]/components/command_processor.js:8791:5)
at <anonymous class>.DelayedCommand.prototype.checkPreconditions_(file:///C:/Users/Admin/AppData/Local/Temp/anonymous2662838285289924370webdriver-profile/extensions/[email protected]/components/command_processor.js:11438:1)
at <anonymous class>.DelayedCommand.prototype.executeInternal_/h(file:///C:/Users/Admin/AppData/Local/Temp/anonymous2662838285289924370webdriver-profile/extensions/[email protected]/components/command_processor.js:11455:11)
at <anonymous class>.DelayedCommand.prototype.executeInternal_(file:///C:/Users/Admin/AppData/Local/Temp/anonymous2662838285289924370webdriver-profile/extensions/[email protected]/components/command_processor.js:11460:7)
at <anonymous class>.DelayedCommand.prototype.execute/<(file:///C:/Users/Admin/AppData/Local/Temp/anonymous2662838285289924370webdriver-profile/extensions/[email protected]/components/command_processor.js:11402:5)

The code is - import org.openqa.selenium.*; import org.openqa.selenium.firefox.FirefoxDriver;

public class Screen_1_Monster {

WebDriver driver;
WebElement wb;
public void operation() throws InterruptedException{
   driver = new FirefoxDriver();
  //going to the desired website
  driver.get("https://login.naukri.com/nLogin/Login.php?URL=http%3A%2F%2Fmy.naukri.com%2FMailers%2Fshowdnc%2F%3Furl%3Dhttp%3A%2F%2Fmy.naukri.com%2FHomePage%2Fview%3Fid%3D6e346be1ad03f4d67d75e5911b88ec3df281f50b07bbd08fb4c7f074e87577b79a86cc384cde9c370d99ad6a3af22255");

  //User id 
  wb = driver.findElement(By.id("emailTxt"));
  wb.click();
  wb.sendKeys("[email protected]");

  //Password
  wb=driver.findElement(By.id("pwd1"));
  wb.click();
  wb.sendKeys("2738");

  //Login Button
  driver.findElement(By.id("sbtLog")).click();
  Thread.sleep(20000);
  //if Usename/Password is incorrect
  wb=driver.findElement(By.id("srvErr"));
  String error=wb.getText();
  String e=wb.getAttribute("value");
  System.out.println(error +"  "+ e);
  //Get status of Welcome page
  String title=driver.getTitle();
  System.out.println(title);
}//operation

 public static void main(String args[]) throws InterruptedException{
   Screen_1_Monster s = new Screen_1_Monster();
   s.operation();
 }
}//Scrren_1_Monster
5

5 Answers

4
votes

Add dependency (pom.xml)

<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

As of log4j version 0.8.5, at class initialization time class, the file log4j.properties will be searched from the search path used to load classes

PropertyConfigurator.configure(System.getProperty("user.dir") + "/src/resources/log4j.properties");

Create log4j.properties file

log4j.rootLogger=DEBUG, file

log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=target/logs/httpClient.log
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=1
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

It's enough.

2
votes

Infact, the exception you're getting has nothing to do with the warning you mention in your post title.

The warning : it's only telling you that you did not define any appender (see log4j documentation for more information) for the selenium driver. So basically, he can't log where you told it to (because you didn't tell him where).

The exception : you told (in your test case) the selenium driver to interact with an element in the web page. The driver didn't find this element, so he can't interact with it.

If you want to google your exception for more infos, look for "Element is not currently visible and so may not be interacted with" instead of the log4j warning :)

0
votes

For me it was enought to add the following lines at the beginning of the main-class (direct after starting)

Properties log4jProp = new Properties();
log4jProp.setProperty("log4j.rootLogger", "WARN");
PropertyConfigurator.configure(log4jProp);
0
votes

for me calling the following code helped and shows the general principle:

  /**
   * initialize log4J
   */
  public static void initLog4J() {
    String clazzes[] = { "org.apache.commons.httpclient.HttpClient",
        "org.apache.commons.httpclient.params.DefaultHttpParams" };
    for (String clazz : clazzes)
      org.apache.log4j.Logger.getLogger(clazz)
          .setLevel(org.apache.log4j.Level.ERROR);
  }

and for Version 2:

 /**
   * initialize log4J
   */
  public static void initLog4J() {
    // make httpclient shut up see http://stackoverflow.com/a/15798443/1497139
    String clazzes[] = { "org.apache.http.wire", "org.apache.http.headers",
        "httpclient.wire.content", "httpclient.wire.header",
        "org.apache.commons.httpclient",
        "org.apache.commons.httpclient.HttpClient",
        "org.apache.commons.httpclient.params.DefaultHttpParams" };

    for (String clazz : clazzes) {
      // https://stackoverflow.com/a/41717213/1497139
      Logger logger = org.apache.logging.log4j.LogManager.getLogger(clazz);
      Configurator.setLevel(logger.getName(),
          org.apache.logging.log4j.Level.ERROR);
    }
  }
-1
votes

please include this snippet in your code...

System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.Jdk14Logger");

hopre this might help