JavaScriptでSelenium RCインターフェイスで書かれた古いユニットテストスクリプトがたくさんあります。 Selenium 3にアップグレードしているので、私はPythonスクリプトを使って自動化された方法でいくつかのRCメソッドを取り除こうとします。私は、これらのスクリプトを1行ずつ繰り返して、Seleneseメソッドを取り出し、それらを解体してWebDriverインターフェイスで再構築しようとしています。例えば:私は空白を格納し、パラメータから分離方法、自動のSelenese方法を識別するためのシステムを持っているので、私は何Pythonの正規表現での二重引用符と一重引用符の間のテキストを取得
driver.findElement(By.xpath("//*[text()='test, xpath']")).sendKeys("test, text");
...として
selenium.type("xpath=//*[text()='test, xpath']", "test, text");
が出力されることだろう左には次の文字列があります:
("xpath=//*[text()='test, xpath']", "test, text")
私はこの問題が常に一貫しているとは限りません。時にはそこに単一引用符でネストされた二重引用符、またはその逆であり、または例えば、二重引用符でネストされた二重引用符などをエスケープ:
("xpath=//*[text()=\"test, xpath\"]", "test, text")
('xpath=//*[text()=\'test, xpath\']', 'test, text')
('xpath=//*[text()="test, xpath"]', 'test, text')
これらはすべて有効です。二重引用符が使用されているのか、一重引用符であるのかにかかわらず、メソッドに渡された引数と常に一致することができます。また、エスケープされた引用符だけでなく文字列を開くのと反対のネストされた引用符も無視してリストとして返します。
['xpath=//*[text()="test, xpath"]', 'test, text']
...など。私は次の式を使ってre.findallを使用しようとしました。
([\"'])(?:(?=(\\?))\2.)*?\1
私が戻ってきたのはこれです。
>>> print arguments
[('"', ''), ('"', '')]
紛失しているものがありますか?
に正規表現フィドルを確認することができます
の95%+の場合に動作します引用符で囲まれた文字列: ''(([^ '\\] *(\\。)?)*)' | "(("^"\\)*(\\。)?)*)" ' –