Как получить все элементы из тега

Как получить все название и счет (6) из всех элементов

мне нужно получить значения

Rs. 2000 - рупий. Ниже Rs. 2001 - рупий. 5000 Rs. 5001 - рупий. 10000 Rs. 10001 - рупий. 18000 рупий. 18001 - рупий. 25000 рупий. 25001 - рупий. 35000 рупий. 35001 и выше

и значения 6 34 41 12 15 9 4

Ниже приведен html

<div><div><code>&lt;div&gt;
&lt;ul id="price_range" nofilter="1" displaytype="" keepcollapsed="" valuelimit=""&gt;
&lt;li title="Rs. 2000 and Below"&gt;


&lt;span original="Rs. 2000 and Below"&gt;Rs. 2000 and Below&lt;/span&gt;
&lt;span&gt;(6)&lt;/span&gt;

&lt;/li&gt;
 &lt;li title="Rs. 2001 - Rs. 5000"&gt;


&lt;span original="Rs. 2001 - Rs. 5000"&gt;Rs. 2001 - Rs. 5000&lt;/span&gt;
&lt;span&gt;(34)&lt;/span&gt;

&lt;/li&gt;

 &lt;li title="Rs. 5001 - Rs. 10000"&gt;
 &lt;/li&gt;&lt;li title="Rs. 10001 - Rs. 18000"&gt;
 &lt;/li&gt;&lt;li title="Rs. 18001 - Rs. 25000"&gt;
 &lt;/li&gt;&lt;li title="Rs. 25001 - Rs. 35000"&gt;
 &lt;/li&gt;&lt;li title="Rs. 35001 and Above"&gt;
 &lt;/li&gt;&lt;/ul&gt;
 &lt;/div&gt;</code> <p> iam, используя приведенный ниже код</p> <pre class="prettyprint linenums">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());
 }
</webelement>

но получение ошибки.

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....
2 ответа

Не удалось найти элемент: {"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"));


Ваш селектор неверен, также вы не печатаете правильные данные в соответствии с вашим требованием. Используйте 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.
}
</webelement>

Надеюсь, это поможет вам :)

licensed under cc by-sa 3.0 with attribution.