2014-11-13 2 views
0

Я пытаюсь использовать скрипт REPL.BAT с новой опцией «J», которая позволяет выражениям JScript для замены аргументов. Этот скрипт был создан @dbenham (оригинал REPL.BAT post и самый ранний StackOverflow post). У меня возникают трудности с синтаксисом и я надеюсь получить помощь. Вот пример сценария.Использование опции J для REPL.BAT

У меня есть следующие строки кода:

"Port #" == driver.find_element_by_id("portno").text: break 

Я хотел бы заменить строку кода выше со следующим:

expected_conditions.text_to_be_present_in_element((By.ID, 'portno'), "Port #") 

Как вы можете видеть, исходную строку кода имеет строчный «id», в то время как код, который я хотел бы заменить, имеет верхний регистр «ID». Я попытался с помощью следующих заменить строку:

type %iFile% | 
repl "\b(.*?) \=\= driver\.find_element_by_(.*?)\(\q(.*?)\q\)\.text\: break" 
"expected_conditions.text_to_be_present_in_element((By.$2.toUpperCase(), '$3'), $1)" 
JMX >filenameNEW.py 

Всякий раз, когда я пытаюсь это, я получаю «JScript ошибка выполнения: недопустимый символ» ошибка. Я попытался изменить ...

$2.toUpperCase() 

... до ...

$[2].toUpperCase() 

... но получить ту же ошибку я заявил в последнем предложении. Может кто-нибудь помочь мне выяснить, что я делаю неправильно? Спасибо заранее!

ответ

1

У вашей проблемы есть несколько деталей; сначала самые простые:

  • Вы пропустили включение опции J!
  • Если вы не используете J-опцию, строка замены - это буква, которая просто изменит значения $ 1, $ 2, ...; например: «Это значение: $ 1». Когда вы используете опцию J, строка замены a JScript выражение, которое должно быть собрано в правильном направлении; например: «Это значение:« + $ 1 », т. е. строка замены - это буквальное значение« Это значение: », соединенное (+) со значением $ 1 (субматчевая подстрока). Таким образом, вы должны переписать полную строку замены как выражение JScript.

Теперь один забавный момент:

  • В выражении можно использовать апостроф заключать буквенные строки, и вы не можете использовать кавычки, поскольку они завершаются параметр REPL.BAT. Сначала я подумал, что апостроф может быть включен как особый символ через его \ x27 hexa-код, но по какой-то странной причине он не работает, поэтому я должен «замаскировать» апостроф с помощью функцииCharCode(). ПРИМЕЧАНИЕ: Я использовал мою программу FindRepl.bat в своих тестах, поэтому не знаю, будет ли поведение dbenham's REPL.BAT одинаковым образом в этом вопросе.

И последнее:

  • В первой части вашего регулярного выражения: \ б (...\ b указывают «начало слова», но слово начинается с первого письмо, поэтому кавычки остаются вне подвыражения! Я изменил эту часть на «\ s + (. *) ...», то есть пропустить пробелы и начать подвыражение при первом непространственном символе, включая кавычки.

Wow! Вот; как я уже сказал, я использовал программу FindRepl.bat, но я думаю, что эту работу так же, как в REPL.BAT:

@echo off 
set line= "Port #" == driver.find_element_by_id("portno").text: break 
echo Input: 
echo %line% 

echo Wanted: 
echo expected_conditions.text_to_be_present_in_element((By.ID, 'portno'), "Port #") 
echo/ 

echo %line%| "FindRepl Modified.bat" "\s+(.*) \=\= driver\.find_element_by_(.*?)\(\q(.*?)\q\)\.text\: break" 
"Apos=String.fromCharCode(39),'expected_conditions.text_to_be_present_in_element((By.'+$2.toUpperCase()+', '+Apos+$3+Apos+'), '+$1+')'" /J /Q:q 

Выход:

expected_conditions.text_to_be_present_in_element((By.ID, 'portno'), "Port #") 

Вы можете попытаться устранить переменную APOS и использовать \ x27 для вставки апострофа внутри буквальной строки, заключенной в апострофы. Буду признателен, если вы опубликуете результат этого изменения ...

+0

Спасибо за ваш ответ @Aacini. Да, я забыл включить мои варианты, что очень важно для определения правильного синтаксиса; мои извинения! Как вы увидите выше, я пытаюсь использовать параметр «J» вместе с опцией «M» и «X». Я верю, что именно поэтому я испытываю трудности. Параметр «M» позволяет мне делать REPL для нескольких строк одновременно, в то время как опция «X» допускает расширенную подстановку в строке REPLACE. Если я уберу ** часть toUpperCase() **, а также опцию «J», код работает отлично, кроме «id» будет строчный, а не заглавный. – rwbyrd

+0

Кроме того, глядя на пример @ dbenham на [сайте] (http://www.dostips.com/forum/viewtopic.php?p=37855#p37855), он, похоже, не использует ** + $ 1 ** в его примерах. – rwbyrd

+0

Сон на этом и возвращаясь к нему, сделал мне что-то хорошее. Теперь я понимаю ваше объяснение. Я создал небольшой скрипт, чтобы сначала воспроизвести эту проблему в малом масштабе и смог заставить ее работать правильно. Я считаю, что сейчас я могу попытаться сделать это намного больше. Спасибо за ваше время и помощь @Aacini! – rwbyrd

Смежные вопросы