是否有任何工具可以为测试自动化目的添加html属性?

时间:2015-10-08 17:52:54

标签: jenkins selenium-webdriver css-selectors continuous-integration automated-tests

有没有人知道是否有一个工具可以为DOM树中的元素添加html属性,以便使选择元素易于使用Selenium进行自动化测试?

该工具需要添加一个新属性,以便它不会干扰现有的javascript,例如“data-nav-id”该属性的值可能是一个哈希,一些独特的东西,如:data-nav -id = “XjsaAksah2ma4”。

另一件事是它不应该改变已经存在的id,假设我在页面中添加了一个新的div标签,该工具只会在新元素中插入属性。

如果有一种方法可以将该工具添加为在Jenkins中持续集成的步骤,那将是完美的。

1 个答案:

答案 0 :(得分:0)

我刚刚编写了一小段代码,它会为html文件中的每个标记注入一个唯一的id。我只需要在我的WEB-INF目录的每个子目录的每个html或动态前端文件(如.jsp)上运行,或者前端相关文件取决于您正在使用的Web应用程序框架的任何位置

package org.automation.htmlcompass;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;

import org.apache.commons.codec.digest.DigestUtils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.nodes.Node;
import org.jsoup.select.NodeVisitor;

public class HtmlCompass {

    public static void parseDocument(String path, String outputFile) throws IOException {
        File input = new File(path);
        Document doc = Jsoup.parse(input, "UTF-8", "http://example.com/");

        doc.traverse(new NodeVisitor() {

            public void tail(Node node, int depth) {
                // TODO Auto-generated method stub
            }

            public void head(Node node, int depth) {
                if (node instanceof Element) {
                    Element e = (Element) node;

                    if(!e.hasAttr("data-nav-id")) {
                        System.out.println("injecting >> tag name "+ e.tagName() + " depth " + depth);
                        injectHash(e);
                    }
                }
            }
        });

        BufferedWriter htmlWriter = new BufferedWriter(new OutputStreamWriter(
                new FileOutputStream(outputFile), "UTF-8"));
        htmlWriter.write(doc.toString());
        htmlWriter.close();
    }

    private static void injectHash(Element element) {
        String seed = element.toString() + System.currentTimeMillis();
        String hash = DigestUtils.sha512Hex(seed).substring(0, 20);
        element.attr("data-nav-id", hash);
    }
}