selenium-java-Firefox 特殊异常:界面找不到元素

在selenium + Java + Firefox 的时候会出现不能通过 By.id()的方式找到界面元素,但是实际上界面上通过fireBug能够找到该元素的且唯一,为什么找不到到呢?

原因分析如下:

1.界面中不只存在一个该name或者class或者的名称的元素;

2.界面中存在iframe框架存在;

3.通过debug模式能够找到界面元素,但是run时,就找不到元素,唯一的一种解释:打开firefox,输入地址后,界面一直处于加载中,当界面未加载完成,便通过webdriver去中界面元素,当然会出现找不到的情况;解决方案:加入等待处理(等待处理方式),再做查找元素处理;thread.sleep();

调整前代码如下

 
 
package info . www . itest ;
import static org . junit . Assert .*;
import org.junit.* ;
import org.openqa.selenium.By ;
import org.openqa.selenium.WebDriver ;
import org.openqa.selenium.firefox.FirefoxDriver ;
public class CreatePost {
@Before
public void setUp () throws Exception {
}
@After
public void tearDown () throws Exception {
}
@Test
public void testLogin (){
System . setProperty ( "webdriver.firefox.bin" , "D:\\Program Files\\Mozilla Firefox\\firefox.exe" );
WebDriver dr = new FirefoxDriver ();
dr . get ( "http://www.1988.com/wordpress/wp-login.php" );
//个人地址
dr . findElement ( By . id ( "user_login" )). sendKeys ( "admin" );
dr . findElement ( By . id ( "user_pass" )). sendKeys ( "admin" );
dr . findElement ( By . id ( "wp-submit" )). click ();
assertTrue ( dr . getCurrentUrl (). contains ( "admin" ));
}
}


错误信息如下

 
 
org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":"id","selector":"user_login"}
Command duration or timeout: 29.28 seconds
For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html
Build info: version: '2.41.0', revision: '3192d8a', time: '2014-03-27 17:18:15'
System info: host: 'HS-Q0TFDE785GM3', ip: '169.254.183.27', os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.6.0_16'
Session ID: c438cb88-3d6c-422d-8aca-a95f2d84bfff
Driver info: org.openqa.selenium.firefox.FirefoxDriver
Capabilities [{platform=XP, acceptSslCerts=true, javascriptEnabled=true, browserName=firefox, rotatable=false, locationContextEnabled=true, version=4.0.1, cssSelectorsEnabled=true, databaseEnabled=true, handlesAlerts=true, nativeEvents=false, webStorageEnabled=true, applicationCacheEnabled=true, takesScreenshot=true}]
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:193)
at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:145)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:595)
at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:348)
at org.openqa.selenium.remote.RemoteWebDriver.findElementById(RemoteWebDriver.java:389)
at org.openqa.selenium.By$ById.findElement(By.java:214)
at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:340)
at info.www.itest.CreatePost.testLogin(CreatePost.java:27)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
at org.junit.runners.ParentRunner.run(ParentRunner.java:236)



调整后代码如下

 
 
package info . www . itest ;
import static org . junit . Assert .*;
import org.junit.* ;
import org.openqa.selenium.By ;
import org.openqa.selenium.WebDriver ;
import org.openqa.selenium.WebElement ;
import org.openqa.selenium.firefox.FirefoxDriver ;
public class CreatePost {
@Before
public void setUp () throws Exception {
}
@After
public void tearDown () throws Exception {
}
@Test
public void testLogin () throws InterruptedException {
System . setProperty ( "webdriver.firefox.bin" , "D:\\Program Files\\Mozilla Firefox\\firefox.exe" );
WebDriver driver = new FirefoxDriver ();
driver . get ( "http://localhost/wordpress/wp-login.php" );
System . out . println ( driver . getCurrentUrl ());
Thread . sleep ( 30000 );
WebElement elementName = driver . findElement ( By . id ( "user_login" ));
elementName . sendKeys ( "admin" );
WebElement elementPassword = driver . findElement ( By . id ( "user_pass" ));
elementPassword . sendKeys ( "admin" );
driver . findElement ( By . id ( "wp-submit" )). click ();
assertTrue ( driver . getCurrentUrl (). contains ( "admin" ));
}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值