首页 文章

在Selenium 3中使用xpath定位元素时出错

提问于
浏览
0

我正在尝试使用 Xpath 单击一个链接(看起来像一个标签按钮),但收到错误 .

这是 html 片段:

<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();

这是错误:

线程“main”中的异常org.openqa.selenium.NoSuchElementException:没有这样的元素:无法定位元素:{“method”:“xpath”,“selector”:“/ html / body / div [5] / div [ 2] / div“}(会话信息:chrome = 54.0.2840.87)(驱动程序信息:chromedriver = 2.27.440174(e97a722caafc2d3a8b807ee115bfb307f7d2cfd9),platform = 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 Capabilities [{applicationCacheEnabled = false,rotate = false,mobileEmulationEnabled = false,networkConnectionEnabled = false,chrome = {chromedriverVersion = 2.27.440174 (E97 a722caafc2d3a8b807ee115bfb307f7d2cfd9),userDataDir = C:\ Users \ AMITPA~1.TTL \ AppData \ Local \ Temp \ scoped_dir11224_7493},takesHeapSnapshot = true,pageLoadStrategy = normal,databaseEnabled = false,handlesAlerts = true,hasTouchScreen = false,version = 54.0.2840.87 ,platform = XP,browserConnectionEnabled = false,nativeEvents = true,acceptSslCerts = true,locationContextEnabled = true,webStorageEnabled = true,browserName = chrome,takesScreenshot = true,javascriptEnabled = true,cssSelectorsEnabled = true,unexpectedAlertBehaviour =}]会话ID:2bb2aa6d378f2c0f6ec720a9ee87068c * **元素信息:{using = xpath,value = / html / body / div [5] / div [2] / div} at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)at sun.reflect.NativeConstructorAccessorImpl.newInstance(来自org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:216)的java.lang.reflect.Constructor.newInstance(未知来源)中的sun.reflect.DelegatingConstructorAccessorImpl.newInstance(未知来源)的未知来源) . 打开位于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)at org.openqa.selenium.remote testProj001.CordysUpgradeDemo.main中的.RemoteWebDriver.findElement(RemoteWebDriver.java:360)(CordysUpgradeDemo.java:19)

Site ::
enter image description here
的屏幕截图

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

3 回答

  • 0

    您可能没有等待页面完全加载 . 尝试点击之前,请尝试等待页面完全加载 . 如果xpath是正确的,那么它必须是那样 .

    要进行测试,请使用Chrome..press F12转到网页以打开开发人员的工具 . 转到控制台选项卡,然后键入以下内容: $x("/html/body/div[5]/div[2]/div") 检查结果 . 如果它返回正确的元素,那么你有正确的xpath . 如果没有,请尝试以下方法:

    • //div[@id='tile-8']

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

    • //span[text()='Suggestion Scheme']

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

  • 1

    你没有提供任何帮助你解决问题的东西,我会给你点,因为现在它正在猜测游戏 .

    我能说什么:

    • 你没有提供页面的完整html,只有按钮,它没有帮助 . 由于您使用Chrome,请勿使用firepath,但以下内容如下:

    人民币(按钮) - >检查 - >人民币突出显示部分 - >复制 - >复制X路径

    并检查xpath是否相同

    • 如果它是相同的,它可能是由您使用的静态方法引起的,驱动程序不是那么智能按下某个东西后面的按钮,或者您必须向下滚动才能按下它 . 这就是我想要截图的原因

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

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

    如上所述,我猜是因为你没有提供任何信息

  • 0

    我可以看到你一直在使用来自firepath的自动生成的Xpath . 大概吧 .

    大多数时候,这些Xpath会出现浏览器兼容性问题 . 开始编写动态Xpath,然后在脚本中使用该xpath,在Firebug或Chrome开发人员选项中检查xpath是否正确 .

    Steps to navigate to Developer option in chrome:

    • 打开chrome并导航到该应用程序 .

    • 按F12 .

    • 现在您将看到开发者控制台 . 单击 ctrl+F 并粘贴您编写的Xpath . 如果Xpath正确,您将在 yellow color 中看到匹配的节点结果突出显示 .

    如果您有任何疑问,请告诉我 .

相关问题