如何使用'构建链接的xpath包含文本'?

时间:2015-08-21 10:34:28

标签: javascript jquery selenium xpath selenium-webdriver

我需要根据包含文本为链接构建Xpath。我已经写了下面的代码来得到它。但是,如果我有三个链接,例如'实体','实体类型'和'实体组',如果我点击'实体',它会生成xpath,如//a[contains(text(),"Entity")]

然而,当Selenium WebDriver识别元素时,它会看到三个包含“实体”文本的对象。为此,Selenium IDE记录了' Entity'链接索引。如何修改下面的代码来检查条件并添加索引?请帮忙。

function getXPath(element) {
    if(element.tagName == 'A'){
    if($(element).find("IMG").length>0 || $(element).find("I").length>0 || $(element).find("SPAN").length>0 || $(element).find("DIV").length>0){
    }else{
    return '//a[contains(text(),"'+ element.innerHTML.trim() +'")]';    
    }
    }

    if(element.tagName == 'IMG' || element.tagName == 'I'){
    if((typeof element.alt !== 'undefined') && element.alt!='')
    return '//img[alt="'+ element.alt +'"]';
    }

    if (element.id!=='')
        return '//*[@id="'+ element.id +'"]';
    if (element===document.body)
        return element.tagName;
    var ix= 0;
    var siblings= element.parentNode.childNodes;
    for (var i= 0; i<siblings.length; i++) {
        var sibling= siblings[i];
        if (sibling===element)
            return getXPath(element.parentNode)+'/'+element.tagName+'['+(ix+1)+']';
        if (sibling.nodeType===1 && sibling.tagName===element.tagName)
            ix++;
    }
}

1 个答案:

答案 0 :(得分:0)

我不完全确定你的脚本试图完成什么,但听起来最简单的解决方案是匹配链接文本完全因为部分匹配会给你冲突,而不是写额外的代码来处理冲突。因此,重写xpath,如果需要空格以进行精确的文本匹配,请删除.trim():

return '//a[text()="'+ element.innerHTML +'"]'; 

如果确切的文字匹配对您的用例不起作用,您能否详细说明您的脚本要尝试完成的内容?

我也注意到你错过了这个xpath的@,以防你在测试时给你错误:

 return '//img[@alt="'+ element.alt +'"]';