Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Selenium 用于随机生成元素id的xpath_Selenium_Protractor - Fatal编程技术网

Selenium 用于随机生成元素id的xpath

Selenium 用于随机生成元素id的xpath,selenium,protractor,Selenium,Protractor,我面临的一个问题是如何定位一行的xpath,该行的元素id是随机生成的 <table> <tbody> <tr> <td><a slotId=2>1996</a> <tr> <td> <td><strong>No

我面临的一个问题是如何定位一行的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>

1996
无数据显示>
史密斯
1997
无数据显示>
卡特尔
2状态可用
....
....
....            
我能够通过xpath找到包含年份的元素。
//表[包含(@id,“main_xslots”)][@class=“grid”]///tr//td//a[.=“1996”]

现在,我想获取行中的所有元素,其中年份是1996年
SlotID
ct
值是动态生成的,所以我不能硬编码它们


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

似乎所有的年份都将是一个链接。那为什么不往上走呢

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

这个xpath将为您提供1996年的所有行。现在,只需在这些行中迭代寻找任何单独的元素

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');
    });
}

能否将
HTML
更新为格式化文本以进行快速分析?您所指的
ct
值到底是什么<代码>表格id,
输入id
标签id
文本区域id
a id
都有
ct
值。是的,所有id都有
ct
值,这就是为什么我想捕获ct值一次,以便使用它来获取其他元素的原因。例如。textarea的id为
area\u ct164\u comments',输入id为
text\u ct165\u Amount',第一行和第二行的id为
ct165
,第三行的id为
ct166
,等等。。我想捕获文本为1996的行的
ct
值。我尝试了此操作,但问题是我无法将输入和文本区域与行区分开来。谢谢。这种方法用于获取元素的id。