[英]selenium webdriver to use data from the visible rows only in a webtable
Siebel Web应用程序有一个包含约200K用户记录的表,但一次显示10条记录。 具有搜索功能,可获取一个特定的用户ID并以相同的表结构显示。 因此,当我搜索一个用户ID时,它仅显示一条记录。 问题是,如果我使用xpath在搜索后显示的单个记录上找到一列,并尝试使用getText()获取该列的值,那么我没有获得正确的值。 相反,我从现在不可见的原始表数据中获取了值。
我的获取td [3]数据的代码如下:
String cellValue = driver.findElement(By.xpath(".//*[@id='s_1_l']/tbody/tr[2]/td[3]")).getText();
System.out.println(cellValue);
请帮助,在此先感谢。
用户ID =“ UX22983221”的搜索后,Webtable的HTML如下:
<div class="ui-jqgrid-bdiv" style="height: 339px; width: 1339px;">
<div style="position:relative;">
<div></div>
<table id="s_1_l" class="ui-jqgrid-btable" border="0" cellspacing="0" cellpadding="0" tabindex="0" role="grid" aria-multiselectable="true" aria-labelledby="" style="width: 1339px;" summary="Employee List" datatable="1">
<tbody>
<tr class="jqgfirstrow" style="height:auto" role="row">
<tr id="1" class="ui-widget-content jqgrow ui-row-ltr ui-state-highlight" tabindex="-1" role="row" style="height: 32px;" aria-selected="true">
<td aria-describedby="s_1_l_cb" style="text-align:center;display:none;" role="gridcell">
<td id="1_s_1_l_Last_N" title="" style="text-align:left;" role="gridcell" aria-labelledby="s_1_l_Last_N s_1_l_altLink">
<td id="1_s_1_l_First_N" title="Man--Product Admin" style="text-align:left;" role="gridcell" aria-labelledby="s_1_l_First_N">Man--Product Admin</td>
<td id="1_s_1_l_Job_ti" style="text-align:left;" role="gridcell" title="" aria-labelledby="s_1_l_Job_Ti"> </td>
<td id="1_s_1_l_Log_Name" title="UX22983221" style="text-align:left;" role="gridcell" aria-labelledby="s_1_l_Log_Name">UX22983221</td>
<td id="1_s_1_l_Resp" title=" Product Adm" style="text-align:left;" role="gridcell" aria-labelledby="s_1_l_Resp s_1_l_altmvg"> Product Adm</td>
<td id="1_s_1_l_Po" title=" CAN SE_2D14403" style="text-align:left;" role="gridcell" aria-labelledby="s_1_l_Po s_1_l_altmvg"> CAN SE_2D14403</td>
<td id="1_s_1_l_Inte_User_Flag" title="Unchecked" style="text-align:center;" role="gridcell" aria-labelledby="s_1_l_Inte_User_Flag s_1_l_altCheckBox">
</tr>
</tbody>
</table>
首先要知道相对xPath与绝对xPath之间的区别。 您正在尝试使用所有用户都通用的绝对xPath获取元素。 而是使用相对的xPath。
绝对xPath:使用从根元素到目标元素的完整路径。
相对xPath:只需引用元素即可。
您的xPath应该是".//*[@id='s_1_l']/tbody/tr[@class='jqgfirstrow']/td[contains(text(),'%s')]"
在java文件中
String cellValue = driver.findElement(By.xpath(String.format(urXpath, userID))).getText();
在这里,您只需要替换用户ID,就可以获取该td
元素。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.