如何获取HTML标记以及它们之间的文本并存储在对象中

时间:2017-11-30 01:50:12

标签: java regex selenium-webdriver automation appium

我正在开发一个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找到它。有没有办法可以通过黄瓜使用正则表达式来完成?

1 个答案:

答案 0 :(得分:0)

我喜欢提供一个存根作为答案,因为我必须同意XPath最适合这里的正则表达式。
另外,如果有人在这里为你提供了一个复杂的正则表达式,可以完成你想要的一切,但是你无法维护......你获得了什么?

以下模式匹配整个页脚div。由于您的描述仅包含一个示例而没有变化,因此我无法做更多。

<div class='footer'>.*?<span class="copysymbol"><\/span>.*?<span class="dot"><\/span>.*?<span class="dot"><\/span>.*?<span class="dot"><\/span>\s*<\/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));
    }
}