【问题标题】:Getting an Error while locating an element using xpath in Selenium 3在 Selenium 3 中使用 xpath 定位元素时出错
【发布时间】:2017-06-25 23:38:35
【问题描述】:

我正在尝试使用Xpath 点击一个链接(看起来像一个标签按钮),但出现错误。

这是html sn-p:

<div id="tile_8" style="height: 93px; width: 26%; background-color: rgb(45, 87, 19); color: white; position: relative; float: left; margin: 10px; padding: 5px; cursor: pointer; z-index: 1; border: 2px solid white;" class="divAppList-shadow" onmouseover="mouseOvering(event,'8')" onmouseout="mouseOuting(event,'8')">
	<b>
	<span style="font-size:medium; z-index:1; color:white;">Suggestion Scheme</span>
	</b><br>
	<span style="text-align:justify; z-index:1;color:white;">There is always a better way of doing a thing. You only can suggest it for us to Improve.</span>
 </div> 

我已经尝试了以下代码:

driver.findElement(By.xpath("/html/body/div[5]/div[2]/div")).click();

这是错误:

线程“主”org.openqa.selenium.NoSuchElementException 中的异常: 没有这样的元素:无法找到元素: {"方法":"xpath","选择器":"/html/body/div[5]/div[2]/div"}
(会话信息:chrome=54.0.2840.87)(驱动程序信息: 铬驱动程序=2.27.440174 (e97a722caafc2d3a8b807ee115bfb307f7d2cfd9),平台=Windows NT 10.0.10586 x86_64)(警告:服务器未提供任何堆栈跟踪信息)命令持续时间或超时:412 毫秒 有关此错误的文档,请访问: http://seleniumhq.org/exceptions/no_such_element.html 构建信息: 版本:'未知',修订:'1969d75',时间:'2016-10-18 09:43:45 -0700' 系统信息:主机:'tmlpnedtp061674',ip:'172.22.84.78',os.name:'Windows 10',os.arch:'amd64',os.version:'10.0', java.version: '1.8.0_101' 驱动信息: org.openqa.selenium.chrome.ChromeDriver 功能 [{applicationCacheEnabled=false, 可旋转=false, mobileEmulationEnabled=false,networkConnectionEnabled=false, 铬={铬驱动程序版本=2.27.440174 (e97a722caafc2d3a8b807ee115bfb307f7d2cfd9), userDataDir=C:\Users\AMITPA~1.TTL\AppData\Local\Temp\scoped_dir11224_7493}, 需要HeapSnapshot=true,pageLoadStrategy=正常, databaseEnabled=false,handlesAlerts=true,hasTouchScreen=false, 版本=54.0.2840.87,平台=XP,browserConnectionEnabled=false, nativeEvents=true,acceptSslCerts=true,locationContextEnabled=true, webStorageEnabled=true,browserName=chrome,takeScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true, unexpectedAlertBehaviour=}] 会话 ID: 2bb2aa6d378f2c0f6ec720a9ee87068c *** 元素信息:{Using=xpath, value=/html/body/div[5]/div[2]/div} at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native 方法)在 sun.reflect.NativeConstructorAccessorImpl.newInstance(未知来源) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(未知 来源)在 java.lang.reflect.Constructor.newInstance(未知来源) 在 org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:216) 在 org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:168) 在 org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:635) 在 org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:368) 在 org.openqa.selenium.remote.RemoteWebDriver.findElementByXPath(RemoteWebDriver.java:473) 在 org.openqa.selenium.By$ByXPath.findElement(By.java:361) 在 org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:360) 在 testProj001.CordysUpgradeDemo.main(CordysUpgradeDemo.java:19)

网站截图::

在屏幕截图中,您可以看到我正在尝试单击“建议方案”按钮链接

【问题讨论】:

  • 请帮助我们,因为我是硒自动化的新手。
  • 分享HTML提到按钮的代码
  • 您使用的是定位xpath,它不会更稳定,为了更好的解决方案,您需要共享相关的 HTML..
  • 如果有帮助,我可以在这里分享 HTML 吗??
  • @AmitPandey 您可以在编辑问题后分享 HTML ..

标签: java selenium xpath selenium-webdriver


【解决方案1】:

你没有提供任何东西来帮助你解决你的问题,我会给你分,因为现在是猜谜游戏。

我能说什么:

  1. 您没有提供页面的完整 html,只有按钮,它没有帮助。由于您使用的是 Chrome,请不要使用 firepath,而是使用以下内容:

    RMB (on button)->inspect->RMB on highlighted part->复制->复制Xpath

    并检查xpath是否相同

  2. 如果相同,可能是您使用的静态方法引起的,驱动程序没有那么聪明,无法按下某物后面的按钮,或者您必须向下滚动才能按下它。这就是我想要截图的原因

如果您需要向下滚动页面以按下它,请在 driver.findElement() 之前添加以下内容:

((JavascriptExecutor)driver).executeScript("scroll(0,250)");  //250 is value of page scrolled, depends how much

如前所述,这是我的猜测,因为您没有提供任何信息

【讨论】:

  • HTML 代码太长,无法在此处粘贴,因此您无法在此处提供。但真的很感谢你提供的答案。
【解决方案2】:

您可能没有等待页面完全加载。 尝试等待页面完全加载,然后再尝试单击它。如果 xpath 是正确的,那么它必须是正确的。

要进行测试,请使用 Chrome 访问网页。按 F12 打开开发者工具。转到控制台选项卡并输入以下内容:$x("/html/body/div[5]/div[2]/div") 检查结果。如果它返回正确的元素,那么你有正确的 xpath。如果没有,请尝试以下操作:

  1. //div[@id='tile-8']

  2. //div[@id='tile-8']/span[text()='Suggestion Scheme']

  3. //span[text()='Suggestion Scheme']

如果选项 1 有效,只需使用 By.id("tile-8") 而不是 By.xpath()

【讨论】:

    【解决方案3】:

    我可以看到您一直在使用从 firepath 自动生成的 Xpath。我想是的。

    大多数时候这些 Xpath 会出现浏览器兼容性问题。开始编写您的动态 Xpath,在脚本中使用该 xpath 之前,请通过在 Firebug 或 Chrome 开发人员选项中检查 xpath 确保它是正确的。

    在 chrome 中导航到开发者选项的步骤:

    1. 打开 chrome 并导航到应用程序。
    2. 按 F12。
    3. 现在您将看到开发者控制台。单击ctrl+F 并粘贴您编写的Xpath。如果 Xpath 正确,您将看到匹配的节点结果在 yellow color 中突出显示。

    如果您有任何问题,请告诉我。

    【讨论】:

    • Thnkx 的答案,但我已经检查了我的 Xpath 一切,并且它是正确的,但代码仍然无法点击它应该实际点击的按钮。
    • 我认为你得到的动态 xpath 有一个来自 F12 的匹配节点,但无法点击它。如果我没有正确,请让我纠正。然后尝试使用除 XPATH 之外的定位器(例如 id)来定位该元素。您也可以尝试使用 javascript 来单击元素,如下所示。 // 假设驱动程序是一个有效的 WebDriver 实例, // 已在别处正确实例化。 WebElement 元素 = driver.findElement(By.id("gbqfd")); JavascriptExecutor 执行程序 = (JavascriptExecutor) 驱动程序; executor.executeScript("arguments[0].click();", element);
    【解决方案4】:

    您可以生成 Xpath,将“ChroPath”安装到浏览器上。

    【讨论】:

      猜你喜欢
      • 2021-04-11
      • 2019-03-09
      • 2018-10-31
      • 1970-01-01
      • 1970-01-01
      • 2021-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多