Ruby Selenium Web Drive:如何通过 xpath div id 和 css 类查找特定元素 [英] Ruby Selenium Web Drive: How to find specific element by xpath div id and css class

查看:40
本文介绍了Ruby Selenium Web Drive:如何通过 xpath div id 和 css 类查找特定元素的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个下面的 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屋!

查看全文
相关文章
其他开发最新文章
热门教程
热门工具
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆