помогите сформировать выражение
-
получаю код элемента в инспекторе он выглядит так: <div class="overlayer"></div>
следуя инструкции в wiki ( https://wiki.bablosoft.com/doku.php?id=ru:is_it_possible_to_execute_certain_action_depending_on_condition_if_statement ) -
пытаюсь использовать третье выражение [[VARIABLE]].indexOf("val")<0
Выполнять только если переменная VARIABLE содержит «val» -
пытаюсь применить в BAS чтобы выполнить действие при этом условии внутри блока if
if
[[SAVED_XML]].indexOf("<div class="overlayer"></div>")<0на выходе получаю лог:
[21:59:41] Поток №1 : SyntaxError: Parse error Номер строки:2 Во время выполнения скрипта {
IF_ELSE_EXPRESSION = VAR_SAVED_XML.indexOf("<div class="overlayer"></div>")<0;
_if(IF_ELSE_EXPRESSION,function(){
section_insert()
section_start("test", 58446,function(){
})},function(){
section_start("test", 7838,function(){ })})}Что не так делаю и как поправить?
-
@Turutur
В строке<div class="overlayer"></div>
уже есть двойные кавычки.Я сделал так и всё сработало:
[[SAVED_XML]].indexOf('<div class="overlayer"></div>')<0
UPD. Т.е. строку достаточно обернуть в одинарные кавычки.
-
@wodopad спасибо за подсказку- а я ведь знал - просто моя невнимательность, но да ладно - выражение правильное - переменная реально содержит <div class="overlayer"></div> - но действия внутри блока if все равно игнорируются и перескакивает выполнение на else - есть какие то соображения?
-
@Turutur
если тебе нужно выполнять это только тогда , когда текст найден:
[[SAVED_XML]].indexOf('<div class="overlayer"></div>') > -1indexOf возвращает позицию начала подстроки. Если не найдено, то возвращает -1
И вообще, не нужно так проверять наличие элементом на странице. Поскольку есть замечательные возможности в BAS работа с XPATH.
в конце Xpath -> Xpath проверить существование
http://savepic.org/8414372.jpgдальше в if вставляешь [[XPATH_EXISTS]]
она будет содержать булевое значение: true или false
если true, то элемент был найден и условие в IF будет выполнятся.только один нюанс, под этот xpath также подойдет и такое: <div class="overlayer"> длвыадл тдл длыдвла д</div>
так что если нужно, чтобы блок <div class="overlayer"> не содержал в себе ничего и был пустым, то выражение нужно такое: //div[@class='overlayer' and string-length(text())=0]
-
Как написал @out , просто нужно развернуть условие, не меньше нуля (
< 0
), а больше -1 (> -1
).Таким образом проверяете появление элемента во фрейме? Если не секрет)
-
@out - спасибо за подробный ответ - мне не подойдет икспас - так как class overlayer могут иметь и другие блоки фрейма и это не секрет (ответ @wodopad ) - а вот за разворот условия спасибо всем...
-
Ребята спасибо вам огромное - все получилось - так сработало. @support - пожалуйста измените запись в wiki ( http://wiki.bablosoft.com/doku.php?id=ru:is_it_possible_to_execute_certain_action_depending_on_condition_if_statement ) - третий способ проверки [[VARIABLE]].indexOf("val")<0 -->
на
[[VARIABLE]].indexOf("val") >-1так как прописанный сейчас вариант не сработал - или тайтл сделайте или объясните почему не сработал в таком виде как сейчас прописан
-
@Turutur да, тут надо исправить опечаточку http://savepic.org/8420574.jpg
а на счет почему сработало или не сработало, то я выше описывал.
-
@Turutur Исправил.