【发布时间】:2020-06-05 22:02:09
【问题描述】:
我有一堆脚本想要替换一些文本。
上下文:我们将 selenium 用于 UI 自动化。我们曾经将 UiElements 的引用存储在地图中。但是我们现在开始使用 PageFactory(一个将所有 UiElements 声明为字符串的类) 因此,当我们使用地图时,我们必须将 UI 元素调用为 objectMap.getIdentifier("navigate.leftsidebar")。但是现在有了 PageFactory(它就像实例化一个对象,并且 UIElements 被声明为一个字符串),我可以访问这些 UIelements objectPageFactory.navigate_leftsidebar(这里 navigate_leftsidebar 是一个字符串)
所以我需要修改所有现有的脚本。有没有办法我可以编写一个脚本来替换它,而不是手动执行? 以下是我将遇到的 3 个场景:
- Click(getElement(objectMap.getIdentifier("navigate.leftsidebar").replace("$Page", "Inbox")), "点击一个元素");
- objectMap.getIdentifier("navigate.leftsidebar")
- Click(objectMap.getIdentifier("navigate.leftsidebar"), "点击一个元素");
这是预期的输出:
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
我们曾经有一些动态的 UiElements(在这种情况下是 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
}
【问题讨论】:
标签: perl substitution