【发布时间】:2016-10-18 13:17:48
【问题描述】:
我开始使用硒。我打开网址并输入我的用户名和密码:Tribal Wars 2。问题是到达这个按钮点击:
<a href="#" class="btn-orange btn-border small-icon" ng-click="selectCharacter(w.charId, w.id, w.loginDisabled)" tooltip="" tooltip-if="w.loginDisabled" tooltip-content="Diese Welt wurde geschlossen." ng-class="{'btn-grey': w.loginDisabled}" <span class="icon" <span class="icon-inner character" ng-class="{ 'character': playerId === w.ownerId, 'coop': playerId !== w.ownerId, 'locked': w.loginDisabled }"</span </span <span class="wrapper align-left" <span class="text character ng-binding"Rammboss</span <span class="text world ng-binding"Leeds Castle</span </span </a
Java 代码:
driver.findElement(By.xpath("//*[@id=\"wrapper\"]/div[2]/div[3]/div/div[ 1]/div[3]/div[ 1]/ul/li/a")).click();
错误信息:
在端口 20436 上启动 ChromeDriver (v2.9.248315) 线程中的异常 “主” org.openqa.selenium.NoSuchElementException:没有这样的元素
(会话信息:chrome=53.0.2785.143)(驱动程序信息: chromedriver=2.9.248315,平台=Windows NT 6.1 SP1 x86_64)(警告: 服务器没有提供任何堆栈跟踪信息)命令 持续时间或超时:39 毫秒有关此错误的文档, 请访问:seleniumhq.org/exceptions/no_such_element.html 构建信息:版本:'2.43.1',修订: '5163bceef1bc36d43f3dc0b83c88998168a363a0',时间:'2014-09-10 09:43:55' 系统信息:主机:'AGBioSA04',ip:'10.4.1.81',os.name: 'Windows 7',os.arch:'amd64',os.version:'6.1',java.version: '1.8.0_102' 驱动程序信息:org.openqa.selenium.chrome.ChromeDriver 功能 [{applicationCacheEnabled=false, rotatable=false, 铬={userDataDir=C:\Users\Admin\AppData\Local\Temp\scoped_dir4760_1168}, 需要HeapSnapshot=true,databaseEnabled=false,handlesAlerts=true, 版本=53.0.2785.143,平台=XP,browserConnectionEnabled=false, nativeEvents=true,acceptSslCerts=true,locationContextEnabled=true, webStorageEnabled=true,browserName=chrome,takeScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true}] 会话 ID: 5f87f399ba0889cb549ffc090b9dffbf 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:423) 在 org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:204) 在 org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:156) 在 org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:599) 在 org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:352) 在 org.openqa.selenium.remote.RemoteWebDriver.findElementByXPath(RemoteWebDriver.java:449) 在 org.openqa.selenium.By$ByXPath.findElement(By.java:357) 在 org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:344) 在 com.mysite.selenium.HomePage.fillField(HomePage.java:46) 在 com.mysite.selenium.HomePage.main(HomePage.java:58) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
这个游戏是用 PHP 和 Javascript 编写的。 硒可以做到这一点吗?
【问题讨论】:
-
这些元素并没有太多“特别”之处。我猜你的选择器根本不对。没有更简单、更好的可维护选择器(可能是 css 选择器)吗?您是否尝试过 chrome 中的 xpath 选择器(例如,在元素视图中使用
$x("//*....")控制台或 ctrl+f)?这里可能出错的另一件事是可能存在时间问题,您可能需要使用隐式/显式超时。