如何在页面上找到特殊元素?

时间:2016-10-18 13:17:48

标签: java html selenium

我开始使用硒。我打开了网址并输入了我的用户名和密码: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)线程中的异常       &#34;主&#34; org.openqa.selenium.NoSuchElementException:没有这样的元素
      (会议信息:chrome = 53.0.2785.143)(驱动信息:       chromedriver = 2.9.248315,platform = Windows NT 6.1 SP1 x86_64)(警告:       服务器没有提供任何堆栈跟踪信息)命令       持续时间或超时:39毫秒有关此错误的文档,       请访问:seleniumhq.org/exceptions/no_such_element.html       构建信息:版本:&#39; 2.43.1&#39;,修订版:       &#39; 5163bceef1bc36d43f3dc0b83c88998168a363a0&#39;,时间:&#39; 2014-09-10       09:43:55&#39;系统信息:主持人:&#39; AGBioSA04&#39;,ip:&#39; 10.4.1.81&#39;,os.name:       &#39; Windows 7&#39;,os.arch:&#39; amd64&#39;,os.version:&#39; 6.1&#39;,java.version:       &#39; 1.8.0_102&#39;驱动程序信息:org.openqa.selenium.chrome.ChromeDriver       功能[{applicationCacheEnabled = false,rotate = false,       铬= {userDataDir = C:\用户\管理员\应用程序数据\本地\ TEMP \ scoped_dir4760_1168},       takesHeapSnapshot = true,databaseEnabled = false,handlesAlerts = true,       version = 53.0.2785.143,platform = XP,browserConnectionEnabled = false,       nativeEvents = true,acceptSslCerts = true,locationContextEnabled = true,       webStorageEnabled = true,browserName = chrome,takesScreenshot = true,       javascriptEnabled = true,cssSelectorsEnabled = true}]会话ID:       5f87f399ba0889cb549ffc090b9dffbf at       sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)       在       sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)       在       sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)       at 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)at       org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:344)       在com.mysite.selenium.HomePage.fillField(HomePage.java:46)at       com.mysite.selenium.HomePage.main(HomePage.java:58)at       sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at       sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)       在       sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)       在java.lang.reflect.Method.invoke(Method.java:498)at       com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)

这个游戏是用Php和Javascript编写的。 是否可以使用硒进行此操作?

3 个答案:

答案 0 :(得分:0)

在chrome控制台上尝试了xpath,但是存在问题。

您只需使用此xpath点击“更多信息”/“Mehr Informationen”按钮

//div[@class='more-info']//a

如果您尝试单击登录按钮,请使用以下xpath之一

//button[span[.='Login']]

或者

//button[@class='button-login']

此外,虽然问题中的xpath不正确并且未返回任何匹配的节点,但为了将来参考,请不要在xpath中指定双引号,即I.e \“wrapper \”。改为使用它:

//*[@id='wrapper']

答案 1 :(得分:0)

您可能需要在登录后等待您的元素。

 WebDriverWait wait = new WebDriverWait(driver, 10); // Wait for 10 seconds.
 wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id=\"wrapper\"]/div[2]/div[3]/div/div[ 1]/div[3]/div[ 1]/ul/li/a")));
 WebElement element = driver.findElement(By.xpath("//*[@id=\"wrapper\"]/div[2]/div[3]/div/div[ 1]/div[3]/div[ 1]/ul/li/a"));
 element.click();
  1. 第一行创建webdriver等待的实例并使用“10” 等待10秒钟。
  2. 第二行告诉selenium要等到元素 指定出现。再次,它会等待10秒钟。
  3. 第3行找到元素并将其称为“元素”。
  4. 第4行点击元素。
  5. 希望有所帮助。

    编辑:只是因为你找到xpaths有困难 - 在chrome:

    1. 右键单击网页上的元素,然后单击“检查”
    2. 应突出显示该元素的HTML
    3. 右键点击突出显示的部分
    4. 将鼠标悬停在'copy'上
    5. 单击“复制xpath”

答案 2 :(得分:0)

是的,无论在哪种语言应用程序开发中,您都可以使用硒。 Selenium在黑盒子级别工作,因此它与Web应用程序的代码库没有任何关系。

关于您的问题,从异常中,元素定位器错误或您需要等待元素存在。您可以在firfox中使用firbug和firepath来确保您的定位器有效并指向正确的元素。

这些是您在提供自动化实施时需要注意的常见事项。需要了解selenium或webdriver是api,并提供了一种与测试中的Web /移动应用程序进行交互的方法。要克服所有其他测试需求和一般自动化挑战,您应该创建基本框架,注意或开始使用可用的现有框架,如QMetry Automation Framework