是否有更好的方法从XPATH字符串生成HTML?

时间:2019-08-15 05:59:31

标签: html xpath

我们想为在非常复杂的网页上使用Selenium webDriver的复杂Java代码编写JUnit测试。

我们发现,保存网页始终会更改xpath,因此就可以了。模拟WebDriver,WebElements既困难又混乱。

最后,我们选择为逻辑使用的XPATHS生成HTML文件,然后让webDriver简单地加载测试HTML页面。

我们在下面编写了代码,并且在大多数时间 都有效。但是在进一步开发之前,我们要问是否有更简单/更好的方法,或者为此目的使用的库或实用程序。

   public void generateHtml(String xPath) {

        ArrayList<String> htmlDoc = new ArrayList<>();
        htmlDoc.add("<!DOCTYPE html>");

        Pattern patt = Pattern.compile("\\[(\\d+)]");
        Matcher matcher;

        String[] tokens = xPath.substring(1).split("/");
        ArrayList<String> closeTags = new ArrayList<>();

        for (final String token : tokens) {
            final String tag = token.split("\\[")[0];

            // collect closing tags
            closeTags.add(mkCloseTag(tag));

            // get the index if present
            matcher = patt.matcher(token);
            int idx = 0;
            if (matcher.find()) {
                idx = Integer.parseInt(matcher.group(1));
            }

            // if indexed, create enough empty tag pairs up to the indexed one
            if (idx > 0) {
                for (int i = 1; i < idx; ++i) {
                    htmlDoc.add(mkTag(tag) + idx);
                    htmlDoc.add(mkCloseTag(tag));
                }
            }

            // append an extra tag pair if idx is 1
            if (idx == 1) {
                closeTags.add(mkTag(tag) + idx);
                closeTags.add(mkCloseTag(tag));
            }

            htmlDoc.add(mkTag(tag));
        }

        // append all the close-tags
        Collections.reverse(closeTags);
        htmlDoc.addAll(closeTags);

        for(String t : htmlDoc) {
            System.out.println(t);
        }
    }

我们正在处理的xpath示例:

/html/body/div[6]/div[3]/div/div[2]/div/div[2]/div/div[2]/div/form/table/tbody/tr/td/table/tbody/tr[2]/td[2]/div/div[2]/div/table/tbody/tr/td/input

0 个答案:

没有答案