随机生成的元素id的xpath

时间:2018-01-12 15:07:25

标签: selenium protractor

我正面临着一个问题,即找到一行的xpath,该行具有随机生成的元素ID。

<table>
    <tbody>
        <tr>
            <td><a slotId=2>1996</a>
                <tr>
                    <td>
                        <td><strong>No data to display></strong></td>
                        <td>
                            <table id=ct164_Name>
                                <tbody>
                                    <tr>
                                        <td><span class=Name><input id=text_ct164_name><label id=label_ct164_name>Smith</label></span></td>
                                    </tr>
                                </tbody>
                            </table>
                        </td>
                        <td>
                            <input id=text_ct164_Amount class=myamount>
                        </td>
                        <td>
                            <textarea id=area_ct164_comments class=Mycomments>
                        </td>
                        <td>
                            <a id=button_ct164_Status class=2 status available></td>
        </tr>
        <tr>
            <td><a slotId=3>1997</a>
                <tr>
                    <td>
                        <td><strong>No data to display></strong></td>
                        <td>
                            <table id=ct165_Name>
                                <tbody>
                                    <tr>
                                        <td><span class=Name><input id=text_ct165_name><label id=label_ct165_name>Carters</label></span></td>
                                    </tr>
                                </tbody>
                            </table>
                        </td>
                        <td>
                            <input id=text_ct165_Amount class=myamount>
                        </td>
                        <td>
                            <textarea id=area_ct165_comments class=Mycomments>
                        </td>
                        <td><a id=button_ct165_Status class=My status>2 status available</a></td>
                </tr>
    ....
    ....
    ....            
</table>

我能够通过xpath找到包含年份的元素。 //table[contains(@id,"main_uxSlots")][@class="grid"]//tr//td//a[.="1996"]

现在,我想获取年份为1996年的行中的所有元素。SlotIDct值是动态生成的,所以我不能对它们进行硬编码。

表中大约有100-200行,除了年份之外,它们具有相同的类和相似的文本值。有人可以建议一种方法来解决这种情况,并根据年份获得ct值。一旦我获得ct值,我就可以获取我想要访问的所有元素的id。

2 个答案:

答案 0 :(得分:1)

HTML代码中的一些问题:

  • 错过了A,TEATAREA的标签;
  • TR出现在错误的地方

请提供正确且格式正确的HTML代码,我们需要相关元素的确切关系来找到您想要的元素。

我粗略猜测了正确的HTML代码,并提供以下代码来解决您的问题:

var util = require('util');

function getId(year) {
    var xpathPattern = '//table[contains(@id, "main_uxSlots")][@class="grid"]' + 
        '/tbody/tr[td/a[.="%s"]]//table';

    var xpathExp = util.format(xpathPattern, year);

    return element(by.xpath(xpathExp))
        .getAttribute('id')
        .then(function(id){
            return id.split('_')[0];
        });
}

function readAmount(year) {

    return getId(year).then(function(id){
        var cssExp = util.format('input#text_%s_Amount', id);

        return element(by.css(cssExp)).getAttribute('value');
    });
}

function readComments(year) {

    return getId(year).then(function(id){
        var cssExp = util.format('textarea#area_%s_comments', id);

        return element(by.css(cssExp)).getAttribute('value');
    });
}

答案 1 :(得分:0)

似乎所有这些年都将成为一个环节。那么为什么不向上走。

//a[.="1996"]/../..

这个xpath将为你提供1996年的所有行。现在只需迭代这些行,查找你正在寻找的任何特定元素。