java - selenium webdriver 仅在 webtable 中使用可见行中的数据

标签 java selenium xpath selenium-webdriver html-table

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 元素。

关于java - selenium webdriver 仅在 webtable 中使用可见行中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47213658/

相关文章:

java - 在eclipse中运行web项目时出错

java - Eclipse 和花括号

java - Selenium 3.2.0 在 driver.quit() @ Win 7 Home Premium 和 GeckoDriver 0.14.0 期间使 FireFox 52 崩溃

c# - 使用 Java 绑定(bind)为 WebDriver 添加类似 C# 的扩展方法

selenium - 如何通过传递复选框名称来选择复选框 - 使用 Selenium/Webdriver

SQL 服务器 : How to seperate XML nodes in different rows

jquery - 无法使用多个类和跳过元素将 CSS 重写为 XPATH

java - 如何获取设计在div文本下方的<b>标签的xpath

java - Android 到 IOS 蓝牙聊天应用程序

java - hibernate 插入错误: ids for this class must be manually assigned before calling save():