有没有人知道是否有一个工具可以为DOM树中的元素添加html属性,以便使选择元素易于使用Selenium进行自动化测试?
该工具需要添加一个新属性,以便它不会干扰现有的javascript,例如“data-nav-id”该属性的值可能是一个哈希,一些独特的东西,如:data-nav -id = “XjsaAksah2ma4”。
另一件事是它不应该改变已经存在的id,假设我在页面中添加了一个新的div标签,该工具只会在新元素中插入属性。
如果有一种方法可以将该工具添加为在Jenkins中持续集成的步骤,那将是完美的。
答案 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);
}
}