如何从所有元素中获取所有标题和计数(6)
我需要获取值
卢比。 2000年 - 卢比。下面
卢比。 2001年 - 卢比。 5000
卢比。 5001 - 卢比。 10000个
卢比。 10001 - 卢比。 18000
卢比。 18001年 - 卢比。 25000
卢比。 25001 - 卢比。 35000
卢比。 35001及以上
和值6 34 41 12 15 9 4
下面是html
<div class="body">
<div class="oneFacet bmargin5">
<input class="expandedContent dont-show" type="text">
<div class="loading"></div>
<div class="head line">
<ul id="price_range" class="facets" nofilter="1" displaytype="" keepcollapsed="" valuelimit="">
<li class="facet" title="Rs. 2000 and Below">
<a class=" active ">
<input class="facetoption" type="checkbox" value="facets.price_range%5B%5D=Rs.+2000+and+Below" autocomplete="off">
<span class="title fk-inline-block lmargin5" original="Rs. 2000 and Below">Rs. 2000 and Below</span>
<span class="count">(6)</span>
</a>
</li>
<li class="facet" title="Rs. 2001 - Rs. 5000">
<a class=" active ">
<input class="facetoption" type="checkbox" value="facets.price_range%5B%5D=Rs.+2001+-+Rs.+5000" autocomplete="off">
<span class="title fk-inline-block lmargin5" original="Rs. 2001 - Rs. 5000">Rs. 2001 - Rs. 5000</span>
<span class="count">(34)</span>
</a>
</li>
<li class="facet" title="Rs. 5001 - Rs. 10000">
<li class="facet" title="Rs. 10001 - Rs. 18000">
<li class="facet" title="Rs. 18001 - Rs. 25000">
<li class="facet" title="Rs. 25001 - Rs. 35000">
<li class="facet" title="Rs. 35001 and Above">
</ul>
</div>
使用以下代码
WebElement ul = driver.findElement(By.cssSelector("div.oneFacet bmargin5 ul"));
List<WebElement> lis = ul.findElements(By.tagName("li"));
for (WebElement li : lis) {
System.out.println("names "+li.getText());
}
但收到错误。
org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":"css selector","selector":"div.oneFacet bmargin5 ul"}
Command duration or timeout: 30.10 seconds
For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html
Build info: version: '2.39.0', revision: 'ff23eac', time: '2013-12-16 16:11:15'
System info: host: 'VALUED-8JGOG5PH', ip: '192.168.1.4', os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.7.0_45'
Session ID: 98a38901-4a9b-4aef-8823-b96f9043f5ad
Driver info: org.openqa.selenium.firefox.FirefoxDriver
Capabilities [{platform=XP, acceptSslCerts=true, javascriptEnabled=true, cssSelectorsEnabled=true, databaseEnabled=true, browserName=firefox, handlesAlerts=true, browserConnectionEnabled=true, webStorageEnabled=true, nativeEvents=true, rotatable=false, locationContextEnabled=true, applicationCacheEnabled=true, takesScreenshot=true, version=26.0}]
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:193)
etc....
答案 0 :(得分:1)
您的选择器不正确,您也没有按照您的要求打印正确的数据。使用 ID 搜索ul,因为这是最快的方法。此外,您需要获得两个单独的文本值,因为您必须尝试以下操作:
WebElement ul = driver.findElement(By.id("price_range"));
List<WebElement> lis = ul.findElements(By.tagName("li"));
for (WebElement li : lis) {
System.out.println("1st part: "+li.getAttribute("title")); //To get "Rs. 2001 - Rs. 5000"
System.out.println("2nd part: "+li.findElement(By.xpath(".//span[@class='count']")).getText()); //To get the count "(6)", if you want just "6" you can manipulate the string fetched.
}
希望它可以帮助你:)
答案 1 :(得分:0)
无法找到元素:{“method”:“css selector”,“selector”:“div.oneFacet bmargin5 ul”}
这可能意味着,使用的选择器错误或找不到具有此选择器的元素。但在您的情况下,问题在于您使用的选择器。
div.oneFacet bmargin5 ul
这是指定多个类名的错误方法,使用period
分隔每个类名而不是space
,即
div.oneFacet.bmargin5 ul
此外,ul有一个id
,使用它会是一个更好的选择。
WebElement ul = driver.findElement(By.id("price_range"));
或
WebElement ul = driver.findElement(By.cssSelector("#price_range"));