【问题标题】:How do you Find and Replace multiple lines of code using Wildcards?如何使用通配符查找和替换多行代码?
【发布时间】:2021-01-22 06:09:32
【问题描述】:

以下代码行分散在我们的 selenium 测试框架中:

{
    {IWebElement}.Clear();
    {IWebElement}.SendKeys({string});
}

我在基类中创建了一个方法,它执行以下操作:

public void ClearFieldAndSendKeys(IWebElement textField, string keysToSend)
{
    textField.Clear();
    textField.SendKeys(keysToSend);
}

用新方法手动替换原始行的每个实例会花费太多时间,因此我下载了一个“多行搜索和替换工具”,可以在此处找到: https://marketplace.visualstudio.com/items?itemName=PeterMacej.MultilineSearchandReplace

计划是使用整个解决方案中的查找和替换工具执行全部替换,该工具执行以下操作:

查找:

{
    {Wildcard1}.Clear();
    {Wildcard1}.SendKeys({Wildcard2});
}

替换:

{
    ClearFieldAndSendKeys({Wildcard1}, {Wildcard2});
}

但是,我试过这个没有成功。我也尝试过分两步进行,其中只有第一个通配符被找到并替换,但这也不起作用。

在这里发帖看看其他人是否成功地完成了我正在努力做的事情。

【问题讨论】:

  • Visual Studio 在搜索和替换时允许使用正则表达式,所以你应该可以使用它。

标签: c# visual-studio selenium replace wildcard


【解决方案1】:

改编 Greg Burghardt 非常有用的答案,我发现我们的解决方案是:

查找:

(.+)\.Clear\(\);[ \t\n\r]+(.+).SendKeys\(([^)]+)\);

替换:

ClearFieldAndSendKeys($1, $3);

接着使用 Format All Files 工具整理代码: https://marketplace.visualstudio.com/items?itemName=munyabe.FormatAllFiles

【讨论】:

    【解决方案2】:

    regular expression 搜索和替换可以帮助您解决此问题。

    1. Ctrl + Shift + R 调出全局搜索和替换对话框。

    2. 在搜索选项中选择“正则表达式”。

    3. 输入您的正则表达式并全部替换。

    但首先,让我们使用ClearFieldAndSendKeys 的扩展方法,因为这对于 C# 来说更惯用:

    static class IWebElementExtensions
    {
        internal static void ClearFieldAndSendKeys(this IWebElement textField, string keysToSend)
        {
            textField.Clear();
            textField.SendKeys(keysToSend);
        }
    }
    

    现在您可以使用{WildCard1}.ClearFieldAndSendKeys({WildCard2}) 调用它。

    这将我们带到正则表达式。

    您基本上想要获取变量、字段或属性名称、“Clear()”方法调用、空格、相同的标识符和传递给“SendKeys”的参数:

    (.+)\.Clear\(\);[ \t\n\r]+(.+).SendKeys\(([^)]+)\);
     1.      2.         3.     4.     5.       6.    7.
    
    1. (.+) — 任何字符 . 一次或多次 +.+ 周围的括号创建了一个反向引用,您可以在替换文本中使用它作为 $1 访问。这应该是 IWebElement 的字段、变量或属性。

    2. \.Clear\(\); — 调用 'Clear()' 方法的其余部分。括号字符使用\ 转义,因此它们被视为文字括号,并且不会创建反向引用。

    3. [ \t\n\r]+ — 空格字符、制表符、换行符和回车符[ \t\n\r] 一次或多次+

    4. (.+) — 任何字符 . 一次或多次 +.+ 周围的括号创建了第二个反向引用,您可以在替换文本中使用$2

    5. .SendKeys\( — 对“SendKeys(...)”的调用在左括号处被缩短。下一位捕获发送到“SendKeys”的参数。

    6. ([^)]+) — 第三个反向引用捕获传递给“SendKeys”方法的参数。这个有点不靠谱。 [^)] 是一个匹配“任何不是右括号的字符”的字符类,因为右括号是方法调用的参数列表的结尾。此反向引用可在您的替换文本中以$3 访问。

    7. \); — 只是一些垃圾文本来匹配方法调用的结尾,因此您的搜索和替换不会在 Visual Studio 中引入 1,300 个构建错误。

    这使您的替换文本:

    $1.ClearFieldAndSendKeys($3);
    

    正则表达式值得花时间学习。它们不是常规的,但是它们是真正的节省时间。正则表达式是文本处理的“瑞士军电锯”,是让优秀开发人员成为优秀开发人员的技能之一。

    【讨论】:

      猜你喜欢
      • 2016-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-29
      • 2023-04-04
      • 2018-07-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多