streLer
(streLer)
28.Январь.2013 11:15:55
#1
ребят помогите плиз. нужно проверить как считается итогая сумма. Есть элементы в Корзине
к ним можно обртатиться след. образом
List <WebElement> TR = driver.findElements(By.xpath(".//*[@id='main']/div/div[2]/div/form/div[1]/div[2]/ul[2]/li/div[2]/div[3]"));
как просуммировать этот список?
AlexAlex
(AlexAlex)
28.Январь.2013 11:42:42
#2
Так как WebDriver не берет со страницы ничего кроме веб-элементов (вот можно почитать ветку Xpath for counting number of rows in a table (WebDriver) ), то как бы ни хотелось, применить sum Function (XPath) не получится.
Так что итерируйте по полученной коллекции, берите у каждого элемента коллекции текст, разбирайте в число и суммируйте. Это очевидный и более легкий вариант.
Либо, сочините javaScript, чтобы он все это делал прямо на странице, и дергайте его через JavascriptExecutor.
mamax
(mamax)
28.Январь.2013 12:56:40
#3
это можно сделать проще
хpath этих элементов будет одинаков кроме одного значения
это значение можно выделить в отдельную переменную и сделать цикл подсчета цен элементов и потом проверить с фактической суммой
приблизительный код
String_xpath_start = ".//*[@id='main']/div/div[2]/div/form/div[1]/div[2]/ul[2]/li/div[ ";
String_xpath_end = "]/div[3] ";
int amount = "someth"
int sum =0;
for(int i=0; i<amount; i++ )
{
String cena = driver.findElement(By.xpath(String_xpath_start +amount +String_xpath_end)).getText(); // перевести string в int
sum +=cena;
}
где то так думаю главную идею я подал
Taras
(Taras)
28.Январь.2013 13:07:36
#4
в int не получиться , там коп после коми, - нужно в double , при етом отрезать текст "руб" - ничего сложного здесь нету....парсер написать нужно и функцию суми.
streLer
(streLer)
28.Январь.2013 13:24:58
#5
Ребят сделал так :
List <WebElement> TR = driver.findElements(By.xpath(".//*[@id='main']/div/div[2]/div/form/div[1]/div[2]/ul[2]/li/div[2]/div[3]"));
for(int x =0 ; x < TR.size() ; x++)
{
String t5 = TR.get(x).getText();
t5 = t5.replace(" ", "");
t5 = t5.replace("руб", "");
System.out.println(t5);
}
теперь надо все это сложить =) как?)))
AlexAlex
(AlexAlex)
28.Январь.2013 14:04:04
#6
List< WebElement> TR = driver.findElements ( By.xpath ( ".//*[@id='main']/div/div[2]/div/form/div[1]/div[2]/ul[2]/li/div[2]/div[3]" ) ) ;
int sum = 0 ;
for ( int x = 0 ; x < TR.size ( ) ; x++) {
sum += Integer .parseInt ( TR.get ( x) .getText ( ) .replace ( " руб" , "" ) ) ;
}
System .out .println ( sum) ;
Без кода страницы не понятно, на что указывает селектор, так что я принял за основу, что он выдает нам целые части цены.
Taras
(Taras)
28.Январь.2013 14:16:22
#7
имхо откинет копейки и подсчитает неверно, вместо int - double используйте или float
ArtOfLife
(Sergey Korol)
28.Январь.2013 19:03:51
#8
Для финансовых операций желательно использовать BigDecimal. Дальше, думаю, разберетесь.
private static final String currency = "руб";
public static String fixPrice(String price) {
return price.replace(currency, "").replaceAll("\\s", "");
}
public static void main(String[] args) {
String[] prices = new String[] { "151.39 руб", "22 498.48 руб", "91.84 руб" };
BigDecimal result = new BigDecimal(fixPrice("22 741.71 руб"));
BigDecimal sum = new BigDecimal("0.00");
for (String price : prices) {
sum = sum.add(new BigDecimal(fixPrice(price)));
}
System.out.println(sum.compareTo(result) == 0);
}
streLer
(streLer)
29.Январь.2013 06:27:01
#9
Спасибо Большое AlexAlex .
Код поправил , все считает, :
List <WebElement> TR = driver.findElements(By.xpath(".//*[@id='main']/div/div[2]/div/form/div[1]/div[2]/ul[2]/li/div[2]/div[3]"));
float sum = 0;
for (int x = 0; x < TR.size(); x++)
{
String t5 = TR.get(x).getText();
t5 = t5.replace(" ", "");
t5 = t5.replace("руб", "");
sum += Float.parseFloat(t5);
}
System.out.println(sum);
streLer
(streLer)
30.Январь.2013 11:18:31
#10
Ребят а как мне вырезать "руб" при помощи регулярного выражения??