【发布时间】:2018-03-18 13:31:51
【问题描述】:
我有一堆(数千个)用 JavaScript 中的 Selenium RC 接口编写的旧单元测试脚本。由于我们正在升级到 Selenium 3,我想尝试使用 Python 脚本以自动化方式摆脱一些 RC 方法。我逐行遍历这些脚本,选择 Selenese 方法,解构它们,然后尝试使用 WebDriver 接口进行重建。例如:
selenium.type("xpath=//*[text()='test, xpath']", "test, text");
将输出为...
driver.findElement(By.xpath("//*[text()='test, xpath']")).sendKeys("test, text");
我有一个自动识别 Selenese 方法、存储空格并将方法与参数分开的系统,所以我剩下的是以下字符串:
("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
[('"', ''), ('"', '')]
我有什么遗漏吗?
【问题讨论】:
-
匹配所有单/双引号字符串:
'(([^'\\]*(\\.)?)*)'|"(([^"\\]*(\\.)?)*)"