Ruby Selenium Web Drive:如何通过 xpath div id 和 css 类查找特定元素 [英] Ruby Selenium Web Drive: How to find specific element by xpath div id and css class
问题描述
我有一个下面的 html 正在尝试使用 ruby selenium web 驱动程序进行测试
<div class="result-row" id="0"><ul><li class="process-status-column upload-success-icon"><svg class="glyphicon-upload-green" viewBox="0 0 100 100"><使用 xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#doc_upload"></use></svg><li class="file-label-column"><span>validated.txt</span></li><li class="client-company-column"><span>test-client</span></li><li class="reference-column"><span>Ref001</span></li><div class="result-row" id="1"><ul><li class="process-status-column upload-error-icon"><svg class="glyphicon-exclamation" viewBox="0 0 100 100"><使用 xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#exclamation"></use></svg><li class="file-label-column"><span>Error.txt</span><div class="attachment-row">此发票包含错误</div><li class="client-company-column"><span>test-client</span></li><li class="reference-column"><span>Ref002</span></li>
<div class="result-row" id="2"><ul><li class="process-status-column upload-pending-icon"><svg class="glyphicon-spin" viewBox="0 0 100 100"><使用 xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#refresh"></use></svg><li class="file-label-column"><span>Pending.txt</span></li><li class="client-company-column"></li><li class="reference-column"></li>
我正在尝试使用 selenium Web 驱动程序在 Ruby 中查找任何给定 div
id 的 svg
元素
rows = driver.find_elements(:css => "div.container-fluid.container-results >div\##{row_number.to_i-1} >ul >li >a >svg")
但是当我运行行号为 1 的脚本时,我遇到了异常
无效选择器:指定了无效或非法选择器(会话信息:chrome=57.0.2987.133)(驱动程序信息:chromedriver=2.28.455520 (cc17746adff54984afff480136733114c6b3704b),platform=Windows NT 6.1.7601 SP1 x86_64)(警告:服务器没有提供任何堆栈跟踪信息)命令持续时间或超时:25 毫秒有关此错误的文档,请访问:http://seleniumhq.org/exceptions/invalid_selector_exception.html驱动程序信息:org.openqa.selenium.chrome.ChromeDriver*** 元素信息:{Using=css selector, value=div.container-fluid.container-results >div#0 >ul >li >a >svg} (org.openqa.selenium.InvalidSelectorException)[远程服务器] sun.reflect.GeneratedConstructorAccessor17():-1:in `newInstance'[远程服务器] sun.reflect.DelegatingConstructorAccessorImpl():-1:in `newInstance'[远程服务器] java.lang.reflect.Constructor():-1:in `newInstance'[远程服务器] org.openqa.selenium.remote.ErrorHandler(ErrorHandler.java):206:in `createThrowable'[远程服务器] org.openqa.selenium.remote.ErrorHandler(ErrorHandler.java):158:in `throwIfResponseFailed'[远程服务器] org.openqa.selenium.remote.RemoteWebDriver(RemoteWebDriver.java):678:in `execute'[远程服务器] org.openqa.selenium.remote.RemoteWebDriver(RemoteWebDriver.java):388:in `findElements'[远程服务器] org.openqa.selenium.remote.RemoteWebDriver(RemoteWebDriver.java):496:in `findElementsByCssSelector'[远程服务器] org.openqa.selenium.By$ByCssSelector(By.java):441:in `findElements'[远程服务器] org.openqa.selenium.remote.RemoteWebDriver(RemoteWebDriver.java):351:in `findElements'[远程服务器] sun.reflect.GeneratedMethodAccessor19():-1:in `invoke'[远程服务器] sun.reflect.DelegatingMethodAccessorImpl():-1:in `invoke'[远程服务器] java.lang.reflect.Method():-1:in `invoke'[远程服务器] org.openqa.selenium.support.events.EventFiringWebDriver$2(EventFiringWebDriver.java):103:in`invoke'[远程服务器] com.sun.proxy.$Proxy1():-1:in `findElements'[远程服务器] org.openqa.selenium.support.events.EventFiringWebDriver(EventFiringWebDriver.java):177:in `findElements'[远程服务器] org.openqa.selenium.remote.server.handler.FindElements(FindElements.java):50:in `call'[远程服务器] org.openqa.selenium.remote.server.handler.FindElements(FindElements.java):1:in `call'[远程服务器] java.util.concurrent.FutureTask():-1:in `run'[远程服务器] org.openqa.selenium.remote.server.DefaultSession$1(DefaultSession.java):176:in `run'[远程服务器] java.util.concurrent.ThreadPoolExecutor():-1:in `runWorker'[远程服务器] java.util.concurrent.ThreadPoolExecutor$Worker():-1:in `run'[远程服务器] java.lang.Thread():-1:in `run'
如果我尝试在浏览器控制台中运行 $("div.container-fluid.container-results >div#0 >ul >li >a >svg")
确实看到了 svg
元素,但它在 Ruby 中不起作用,有人可以帮助我吗?
我正在尝试查找任何给定 div id 的 svg 元素
如果这是你想要的,你可以试试这个:
driver.find_element(:id => "the_given_id").find_elements(:tag_name => "svg")
I have a below html which am trying to test using ruby selenium web driver
<div class="container-fluid container-results">
<div class="result-row" id="0">
<ul>
<li class="process-status-column upload-success-icon">
<svg class="glyphicon-upload-green" viewBox="0 0 100 100">
<use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#doc_upload"></use>
</svg>
</li>
<li class="file-label-column"><span>validated.txt</span></li>
<li class="client-company-column"><span>test-client</span></li>
<li class="reference-column"><span>Ref001</span></li>
</ul>
</div>
<div class="result-row" id="1">
<ul>
<li class="process-status-column upload-error-icon">
<svg class="glyphicon-exclamation" viewBox="0 0 100 100">
<use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#exclamation"></use>
</svg>
</li>
<li class="file-label-column"><span>Error.txt</span>
<div class="attachment-row">This invoice contains an error</div>
</li>
<li class="client-company-column"><span>test-client</span></li>
<li class="reference-column"><span>Ref002</span></li>
</ul>
</div>
<div class="result-row" id="2">
<ul>
<li class="process-status-column upload-pending-icon">
<svg class="glyphicon-spin" viewBox="0 0 100 100">
<use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#refresh"></use>
</svg>
</li>
<li class="file-label-column"><span>Pending.txt</span></li>
<li class="client-company-column"></li>
<li class="reference-column"></li>
</ul>
</div>
</div>
I am trying to find the svg
element of any given div
id as below in Ruby using selenium web driver
rows = driver.find_elements(:css => "div.container-fluid.container-results >div\##{row_number.to_i-1} >ul >li >a >svg")
But I am getting below exception when am running the script with row number 1
invalid selector: An invalid or illegal selector was specified
(Session info: chrome=57.0.2987.133)
(Driver info: chromedriver=2.28.455520 (cc17746adff54984afff480136733114c6b3704b),platform=Windows NT 6.1.7601 SP1 x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 25 milliseconds
For documentation on this error, please visit: http://seleniumhq.org/exceptions/invalid_selector_exception.html
Driver info: org.openqa.selenium.chrome.ChromeDriver
*** Element info: {Using=css selector, value=div.container-fluid.container-results >div#0 >ul >li >a >svg} (org.openqa.selenium.InvalidSelectorException)
[remote server] sun.reflect.GeneratedConstructorAccessor17():-1:in `newInstance'
[remote server] sun.reflect.DelegatingConstructorAccessorImpl():-1:in `newInstance'
[remote server] java.lang.reflect.Constructor():-1:in `newInstance'
[remote server] org.openqa.selenium.remote.ErrorHandler(ErrorHandler.java):206:in `createThrowable'
[remote server] org.openqa.selenium.remote.ErrorHandler(ErrorHandler.java):158:in `throwIfResponseFailed'
[remote server] org.openqa.selenium.remote.RemoteWebDriver(RemoteWebDriver.java):678:in `execute'
[remote server] org.openqa.selenium.remote.RemoteWebDriver(RemoteWebDriver.java):388:in `findElements'
[remote server] org.openqa.selenium.remote.RemoteWebDriver(RemoteWebDriver.java):496:in `findElementsByCssSelector'
[remote server] org.openqa.selenium.By$ByCssSelector(By.java):441:in `findElements'
[remote server] org.openqa.selenium.remote.RemoteWebDriver(RemoteWebDriver.java):351:in `findElements'
[remote server] sun.reflect.GeneratedMethodAccessor19():-1:in `invoke'
[remote server] sun.reflect.DelegatingMethodAccessorImpl():-1:in `invoke'
[remote server] java.lang.reflect.Method():-1:in `invoke'
[remote server] org.openqa.selenium.support.events.EventFiringWebDriver$2(EventFiringWebDriver.java):103:in `invoke'
[remote server] com.sun.proxy.$Proxy1():-1:in `findElements'
[remote server] org.openqa.selenium.support.events.EventFiringWebDriver(EventFiringWebDriver.java):177:in `findElements'
[remote server] org.openqa.selenium.remote.server.handler.FindElements(FindElements.java):50:in `call'
[remote server] org.openqa.selenium.remote.server.handler.FindElements(FindElements.java):1:in `call'
[remote server] java.util.concurrent.FutureTask():-1:in `run'
[remote server] org.openqa.selenium.remote.server.DefaultSession$1(DefaultSession.java):176:in `run'
[remote server] java.util.concurrent.ThreadPoolExecutor():-1:in `runWorker'
[remote server] java.util.concurrent.ThreadPoolExecutor$Worker():-1:in `run'
[remote server] java.lang.Thread():-1:in `run'
If I try running $("div.container-fluid.container-results >div#0 >ul >li >a >svg")
in my browser console I do see the svg
elements but its not working from Ruby, can someone please help me with this?
I am trying to find the svg element of any given div id
If this is what you want, you can try this one:
driver.find_element(:id => "the_given_id").find_elements(:tag_name => "svg")
这篇关于Ruby Selenium Web Drive:如何通过 xpath div id 和 css 类查找特定元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!