没有为logger找到appender(org.apache.http.client.protocol.RequestAddCookies)

时间:2014-09-23 14:21:15

标签: java selenium selenium-webdriver log4j

我正在尝试在Firefoxdriver上运行selenium webdriver代码但是在运行时我得到了一个例外 -

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/fxdriver@googlecode.com/components/command_processor.js:8791:5)
at <anonymous class>.DelayedCommand.prototype.checkPreconditions_(file:///C:/Users/Admin/AppData/Local/Temp/anonymous2662838285289924370webdriver-profile/extensions/fxdriver@googlecode.com/components/command_processor.js:11438:1)
at <anonymous class>.DelayedCommand.prototype.executeInternal_/h(file:///C:/Users/Admin/AppData/Local/Temp/anonymous2662838285289924370webdriver-profile/extensions/fxdriver@googlecode.com/components/command_processor.js:11455:11)
at <anonymous class>.DelayedCommand.prototype.executeInternal_(file:///C:/Users/Admin/AppData/Local/Temp/anonymous2662838285289924370webdriver-profile/extensions/fxdriver@googlecode.com/components/command_processor.js:11460:7)
at <anonymous class>.DelayedCommand.prototype.execute/<(file:///C:/Users/Admin/AppData/Local/Temp/anonymous2662838285289924370webdriver-profile/extensions/fxdriver@googlecode.com/components/command_processor.js:11402:5)

代码是 -     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("an@gmail.com");

  //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 个答案:

答案 0 :(得分:3)

添加依赖项(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");

创建log4j.properties文件

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

这就够了。

答案 1 :(得分:2)

事实上,您获得的例外情况与您在帖子标题中提到的警告无关。

警告:它只告诉您没有为selenium驱动程序定义任何appender(有关详细信息,请参阅log4j documentation)。所以基本上,他不能记录你告诉它的地方(因为你没有告诉他在哪里)。

异常:您告诉(在您的测试用例中)selenium驱动程序与网页中的元素进行交互。驱动程序没有找到这个元素,因此他无法与之交互。

如果您想要查找更多信息的异常,请查找“元素当前不可见,因此可能无法与之交互”而不是log4j警告:)

答案 2 :(得分:0)

对我而言,应该在主类的开头添加以下行(开始后直接)

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

答案 3 :(得分:0)

对我来说,调用以下代码有帮助并显示了一般原理:

  /**
   * 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);
  }

,对于版本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);
    }
  }

答案 4 :(得分:-1)

请在您的代码中包含此代码段...

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

跳跃这可能会有所帮助