J'ai un tas (milliers) d'anciens scripts de tests unitaires écrits avec l'interface Selenium RC en JavaScript. Puisque nous passons à Selenium 3, je veux essayer de me débarrasser de certaines méthodes RC de façon automatisée en utilisant des scripts Python. Je suis en train de parcourir ces scripts ligne par ligne, en sélectionnant les méthodes Selenese, en les déconstruisant puis en essayant de reconstruire avec l'interface WebDriver. Par exemple:Saisir du texte entre des guillemets simples ou doubles en Python regex
selenium.type("xpath=//*[text()='test, xpath']", "test, text");
Est-ce que sortira en ...
driver.findElement(By.xpath("//*[text()='test, xpath']")).sendKeys("test, text");
J'ai un système d'identification automatique des méthodes Selenese, le stockage des espaces et séparant la méthode des paramètres, donc ce que je suis gauche avec est la chaîne suivante:
("xpath=//*[text()='test, xpath']", "test, text")
Un problème que je rencontre est, ils ne sont pas toujours cohérents. Parfois il y a des doubles guillemets imbriquées dans les guillemets simples, ou vice-versa, ou se sont échappés des guillemets doubles imbriquées dans des guillemets doubles, etc. Par exemple:
("xpath=//*[text()=\"test, xpath\"]", "test, text")
('xpath=//*[text()=\'test, xpath\']', 'test, text')
('xpath=//*[text()="test, xpath"]', 'test, text')
Ce sont tous valides. Je veux pouvoir toujours faire correspondre les arguments passés dans la méthode, que les guillemets soient utilisés ou les guillemets simples, et ignorer les guillemets imbriqués à l'opposé de ce qui est utilisé pour ouvrir la chaîne ainsi que les guillemets échappés, puis les retourner comme des listes.
['xpath=//*[text()="test, xpath"]', 'test, text']
... etc. J'ai essayé d'utiliser le re.findall en utilisant l'expression suivante.
([\"'])(?:(?=(\\?))\2.)*?\1
Ce que je récupère est ceci.
>>> print arguments
[('"', ''), ('"', '')]
Y at-il quelque chose qui me manque?
pour correspondre à tous les simple/double Chaînes entre guillemets: '(([^ '\\] * (\\.)?) *)' |" (([^ "\\] * (\\.)?) *)" ' –