我正在开发一个selneium-appium-java移动Web自动化框架。我有一个黄瓜测试,它使用正则表达式接受一些文本并将其作为参数进一步传递,如:
@Given("^user checks text \"([^\"]*)\" in footer$")
public void checkFooter(String footerText) {
footerComponent.checkNote(footerText);
}
以下是如何设置查找FooterComponent类
中节点的基本文本的方法 private final String FOOTER = "//div[contains(@class, 'footer')]";
public void checkNote(String expectedText) {
By note = By.xpath(FOOTER + "//div[@class='footer-footnote']");
String actualText = getDriver().findElement(footerText).getText();
assertEquals(actualText, expectedText, "Unexpected footer note");
}
我需要验证预期结果的DOM示例:
<div class='footer'>
text1
<span class="copysymbol"></span>
text2
<span class="dot"></span>
text3
<span class="dot"></span>
text4
<span class="dot"></span>
</div>
我尝试过使用这里的模式但是我没有成功: https://alvinalexander.com/blog/post/java/how-extract-html-tag-string-regex-pattern-matcher-group
所以基本上我需要插入一些文本来检查标签的存在(它代表我需要检查的特殊字符)和黄瓜行之间的文本然后用java方法检查实际的代码通过Xpath找到它。有没有办法可以通过黄瓜使用正则表达式来完成?
答案 0 :(得分:0)
我喜欢提供一个存根作为答案,因为我必须同意XPath最适合这里的正则表达式。
另外,如果有人在这里为你提供了一个复杂的正则表达式,可以完成你想要的一切,但是你无法维护......你获得了什么?
以下模式匹配整个页脚div。由于您的描述仅包含一个示例而没有变化,因此我无法做更多。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
final String regex = "<div class='footer'>.*?<span class=\"copysymbol\"><\\/span>.*?<span class=\"dot\"><\\/span>.*?<span class=\"dot\"><\\/span>.*?<span class=\"dot\"><\\/span>\\s*<\\/div>";
final String string = "<div class='footer'>\n"
+ "text1\n"
+ "<span class=\"copysymbol\"></span>\n"
+ "text2\n"
+ "<span class=\"dot\"></span>\n"
+ "text3\n"
+ "<span class=\"dot\"></span>\n"
+ "text4\n"
+ "<span class=\"dot\"></span>\n"
+ "</div>";
final Pattern pattern = Pattern.compile(regex, Pattern.DOTALL);
final Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
System.out.println("Full match: " + matcher.group(0));
for (int i = 1; i <= matcher.groupCount(); i++) {
System.out.println("Group " + i + ": " + matcher.group(i));
}
}