我有很多脚本想要替换一些文本。
上下文:我们将硒用于UI自动化。我们曾经将对UiElement的引用存储在地图中。但是我们现在正在使用PageFactory(将所有UiElement声明为字符串的类)因此,当我们使用地图时,我们必须将UIelements称为objectMap.getIdentifier(“ navigate.leftsidebar”)。但是现在有了PageFactory(就像实例化一个对象,并且UIElements声明为字符串一样),我可以访问这些UIelements objectPageFactory.navigate_leftsidebar(这里navigation_leftsidebar是一个字符串)
因此,我将需要修改所有现有脚本。除了手动执行脚本之外,还有什么方法可以编写脚本来替换它?以下是我将遇到的3种情况:
这是预期的输出:
Click(((objectPageFactory.navigate_leftsidebar(“ Inbox”)),“单击元素”);
objectPageFactory.navigate_leftsidebar
Click(objectPageFactory.navigate_leftsidebar,“单击元素”);
更改是:
“ objectMap”重命名为“ objectPageFactory”可能有不同类型的地图。如果为objectMap,则应将其替换为objectPageFactory;如果是loginMap,则应将其更改为loginPageFactory
objectMap.getIdentifier(“ navigate.leftsidebar”)>>>> objectFactory.navigate_leftsidebar(括号内的String文字由下划线而不是点分隔
现在不需要getElement
我们曾经有一些动态的UiElement(在本例中为navigate.leftsidebar),我们曾经为此调用过String.replace,现在我们正在编写内部执行String.format的函数。getElement(objectMap.getIdentifier(“ navigate.leftsidebar”)。replace(“ $ Page”,“ Inbox”))>>>>> objectPageFactory.navigate_leftsidebar(“ Inbox”)
我从此链接获得了一个perl脚本,它将完成部分工作sed command to replace dots。我只需要添加不同的方案,有没有办法?输出现在也应该具有pageFactory文本,具体取决于哪个地图
#! /usr/bin/perl
use strict ;
sub fix { $_ = shift ; s/"//g ; s/\./_/g ; return $_ }
while ( <> ) {
s/getElement\(objectMap\.getIdentifier\(("?[a-z.]+"?)\)/fix($1)/e ;
s/objectMap\.getIdentifier\(("?[a-z.]+"?)\)/fix($1)/e ;
print
}
这似乎提供了您要求的输出。我不了解您要更改的语言,因此可能在某些极端情况下处理错误。在更改文件之前进行备份!
#!/usr/bin/perl
use warnings;
use strict;
sub fix {
my ($id) = @_;
return $id =~ s/[.]/_/gr
}
while (<>) {
s{getElement\((object|login)Map\.getIdentifier\("([^"]*)"\)\.replace\("\$Page", "([^"]*)"\)\)}
{"$1PageFactory." . fix($2) . qq(("$3"))}ge;
s{(object|login)Map\.getIdentifier\("([^"]*)"\)}
{"$1PageFactory." . fix($2)}ge;
print;
}