На странице цена товара: ‘8 млн руб‘.
Задача: сравнить цену товара с эталоном ’10’. Если цена выше 10 – сообщать о проблеме. Если цена ниже 10 – спокойно продолжаем проверки.
Решение: в несколько шагов.
Понятно, что сперва надо сохранить текст в переменную.
| storeText | css=span[name=”price”] | maxprice
Теперь в переменной надо оставить от текста ‘8,8 млн руб’ только цифру. Это мы сделаем посредством replace. Затем надо будет сравнить итоговую цифру с эталоном.
Эти два шага можно сделать одним элегантным движением:
| storeEval | if (storedVars[‘maxprice’].replace(” млн руб.”, “”) <= 10 ) {} else {alert(“Price is higer than 10”)}
Читаем: если значение переменной ‘maxprice’ меньше или равно 10, то ничего не делать.
Если значение переменной ‘maxprice’ выше 10, то выдаем alert (“Ахтунг, Покрышкин в воздухе!”).
Вероятная проблема: разделителем циферок будет запятая. Если на странице будет текст: ‘8.5 млн руб’, то скрипт все правильно сравнит. Если же текст будет ‘8,5 млн руб’, то скрипт забьется в истерике, потому что значение ему предлагают априори несравниваемое.
Вероятное решение: если допустимо, следует сделать замену не только букв, но и запятых на точки – еще одна строка кода. Некрасиво, но работает.
Задача: нужно сравнить две дроби (напр. “10/3 руб” и “3 руб 33 коп”), если нужно делить итд
Вероятное решение: парсим строки и приводим к рациональному числу, а дальше как в лабе из универа – if( abs(value1 – value2) > epsilon ), где epsilon – нужная точность (заданая константа, напр 0.01)
Вообще я редко, очень редко, неимоверно редко сталкивался с подобными задачами.
На тестируемых сайтах цены всегда однозначно и однотипно отображаются, поэтому не приходится извращаться “А если будет с запятой, а если будет с точкой”. Всегда или одно, или другое.
Я имел в виду задачу, где отображение на UI “всегда однозначно и однотипно” идет в десятичных дробях (3.33), а проверить надо, сверив с числом, которое надо еще и вычислить с помощью деления (10 / 3). Пример – калькулятор кредита для покупателя.
Извините, если что-то не то говорю 🙂
Алексей, а если сравнивать даты? есть два инпут поля с календарями. Оттуда я беру значение в виде 24/01/2012.
Мои попытки сравнить их как storedVars[‘start’] < storedVars['end'] не увенчались успехом. Т.к. если конечная дата будет в следующем месяце 01/02/2012, то будет false.
Также пробовал парсить как Date.parse(storedVars['start']) и сравнивать, но тот же результат… В каком направлении двигаться?
Хороший вопрос.
Прямо сейчас не знаю, надо это дело поисследовать.
Как я понимаю задача розпарсить стрингу даты и преобразовать ее, чтоб потом скормить в формат пригодный для Date.parse (у вас месяц второй, а нужно использовать месяц первый). Можно попробовать что то такое:
var start = “24/01/2012”;
var end = “01/02/2012”;
var newStart = Date.parse(start.substring(3,5) + “/” + start.substring(0,2) + “/” + start.substring(6,10));
var newEnd = Date.parse(end.substring(3,5) + “/” + end.substring(0,2) + “/” + end.substring(6,10));
тогда:
newStart = 1327356000000
newEnd = 1328047200000
и можно использовать условие if(newStart > newEnd)
Только что у меня на Firefox сработоло без проблем 🙂