Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.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
Java 单击webTable中特定记录的特定按钮_Java_Selenium_Xpath_Selenium Webdriver - Fatal编程技术网

Java 单击webTable中特定记录的特定按钮

Java 单击webTable中特定记录的特定按钮,java,selenium,xpath,selenium-webdriver,Java,Selenium,Xpath,Selenium Webdriver,在我们的应用程序中,我有一个场景可以单击特定用户的编辑图标。 因此,目前我使用以下代码: 下面是“编辑”按钮的html源代码: <tbody id="defaultOverviewTable_data" class="ui-datatable-data ui-widget-content"> <tr class="ui-widget-content ui-datatable-even ui-datatable-selectable" aria-selected="fal

在我们的应用程序中,我有一个场景可以单击特定用户的编辑图标。 因此,目前我使用以下代码:

下面是“编辑”按钮的html源代码:

<tbody id="defaultOverviewTable_data" class="ui-datatable-data ui-widget-content">
    <tr class="ui-widget-content ui-datatable-even ui-datatable-selectable" aria-selected="false" role="row" data-rk="5910" data-ri="0">
    <tr class="ui-widget-content ui-datatable-odd ui-datatable-selectable" aria-selected="false" role="row" data-rk="1" data-ri="1">
    <tr class="ui-widget-content ui-datatable-even ui-datatable-selectable" aria-selected="false" role="row" data-rk="1211" data-ri="2">
    <tr class="ui-widget-content ui-datatable-odd ui-datatable-selectable ui-state-hover" aria-selected="false" role="row" data-rk="14" data-ri="3">
        <td class="ui-selection-column" style="width:17px;min-width:17px;max-width:17px;" role="gridcell">
        <td role="gridcell">HemaSundar</td>
        <td style="width:105px;min-width:105px;max-width:105px;" role="gridcell">52A-4EB-52C-294</td>
        <td role="gridcell">HemaSundar</td>
        <td role="gridcell">HemaSundar</td>
        <td role="gridcell">Banking, Admin, System, EuropeanGate, SAP, MBS, Audit, Confidential Payments, iPhone App</td>
        <td role="gridcell">
        <td class="fillerColumn" style="width:0px;min-width:0px;max-width:0px;" role="gridcell"/>
        <td class="iconColumn width_components_4" style="width:160px;min-width:160px;max-width:160px;" role="gridcell">
            <div class="columnDiv">
                <div id="defaultOverviewTable:3:j_id128" class="ui-outputpanel ui-widget">
                    <button id="defaultOverviewTable:3:j_id129" class="ewms-ui-icon-superEdit ui-button ui-widget ui-state-default ui-corner-all ui-button-icon-only ui-state-hover" type="submit" title="" alt="Edit" onclick="return false;PrimeFaces.addSubmitParam('defaultOverviewForm',{'edit_id':'14'})" name="defaultOverviewTable:3:j_id129" role="button" aria-disabled="false">
                        <span class="ui-button-text ui-c">ui-button</span>
                    </button>
                </div>

赫马桑达尔
52A-4EB-52C-294
赫马桑达尔
赫马桑达尔
银行、管理、系统、EuropeanGate、SAP、MBS、审计、保密支付、iPhone应用程序
用户界面按钮
以下是我现在使用的代码:

WebElement overview = driver.findElement(By.id("defaultOverviewTable_data"));// considering the complete webtable
        List<WebElement> individualRows = overview.findElements(By.tagName("tr"));//considering invidual user
        for (WebElement wb: individualRows)
        {
            List<WebElement> indWb = wb.findElements(By.tagName("td"));// considering individual columns for individual users
            System.out.println(indWb.get(1).getText());
            if (indWb.get(1).getText().equalsIgnoreCase(username))// if the username equals the expected
            {
                List<WebElement> allButtons = wb.findElements(By.tagName("button"));// getting all the buttons of that user
                for (WebElement edit: allButtons)
                {
                    System.out.println(edit.getAttribute("title"));
                    if (edit.getAttribute("title").matches("Edit"))
                    {
                        edit.click();// clicking on button where title is Edit.
                        break;
                    }
                }
                break;
            }
        }
WebElement overview=driver.findElement(By.id(“defaultoverview表_数据”);//考虑完整的webtable
列出单个行=overview.findElements(按.tagName(“tr”))//考虑双重用户
for(WebElement wb:individualRows)
{
List indWb=wb.findElements(按.tagName(“td”);//考虑个别用户的个别列
System.out.println(indWb.get(1.getText());
if(indWb.get(1.getText().equalsIgnoreCase(username))//如果用户名等于预期值
{
列出所有按钮=wb.findElements(按.tagName(“按钮”);//获取该用户的所有按钮
对于(WebElement编辑:所有按钮)
{
System.out.println(edit.getAttribute(“title”);
如果(edit.getAttribute(“title”).matches(“edit”))
{
edit.click();//单击标题为edit的按钮。
打破
}
}
打破
}
}
有时,表中有300多个用户,如果我想为大约位于200个位置的用户单击“编辑”。这需要更多的时间

使用XPATH单击用户名列等于特定名称的编辑按钮是否还有其他方法


注意:按钮的ID不是常数。

我相信这个XPath应该可以实现您想要实现的目标

//tbody[@id='defaultOverviewTable_data']/tr[./td[2][text()='HemaSundar']]//button[@alt='Edit']
注:

  • 之所以使用td[2],是因为XPath是基于1的,您可以在 第二列

  • 您提到了单击按钮,该按钮位于
    title=“Edit”
    位置,但您的代码片段实际上没有该按钮,因此我选择按
    alt
    属性

XPath可能非常强大,如果您想要更深入的解释,请告诉我

编辑:在下面添加更好的XPath解释

//tbody[@id='defaultOverviewTable_data']
这将在页面上的任意位置找到id为='defaultOverviewTable_data'的tbody元素。简单的

/tr[./td[2][text()='HemaSundar']]
这将查找一个
tr
元素,该元素是
tbody
的直接子元素(开头只有一个
/
)。方括号部分意味着它将只查找方括号内符合条件的行(
/td[2][text()='hemasandar']
),或者在英语中,它将只查找第二个子
td
中包含文本'hemasandar'的行

//button[@alt='Edit']
最后,这将在tr下面找到任何按钮(不仅仅是直接子项,因为双
/
),它们具有
alt
属性“Title”。如果愿意,您可以将@alt部分切换为与任何其他属性匹配


如果解决了您的问题,请不要忘记将此答案标记为正确:)

用户名和特定名称在HTML中的位置?在HTML中,“用户名”是“Hemasndar”需要单击编辑图标(从最后一行开始的3行)“Hemasndar”用户名是特定名称。。。。需要单击编辑按钮“UserName”列等于“hemasndar”,您应该在单个XPath查询中执行此操作。不需要连续循环。非常感谢。这个效果很好。但是我没有完全理解XPATH。你能更详细地告诉我一点吗。或者你能给我推荐一些高级XPATH教程吗。我有基本的XPATH知识。很高兴能提供帮助:)已经用更好的解释更新了答案