我正在尝试在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
答案 0 :(得分:3)
添加依赖项(pom.xml)
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
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");
跳跃这可能会有所帮助