我正在尝试进行一个自动测试,包括注册一个新用户并删除它,因此该测试可以运行多次。在wp-admin / users.php上有一个表,其中每个用户的格式为“ tr”。如果我有用户的电子邮件,可以获取用户ID(特别是号码)吗?
现在,我正在尝试列出Web元素列表,将其转换为字符串(getAttribute(“ outerHTML”),并将其大小减小为1个元素,其中包含电子邮件。但是我不知道如何解构字符串,这样我就可以获取所需的ID号。
List<WebElement> trTags = driver.findElements(By.tagName("tr"));
List<String> users = trTags.stream().filter(item -> item.isDisplayed()).map(item->item.getAttribute("outerHTML")).collect(Collectors.toList());
users.removeIf(elem -> !elem.contains("test@test.com"));
users.stream().forEach(elem -> System.out.println(elem));
结果就是这样
<tr id="user-20">
<th scope="row" class="check-column">
<label class="screen-reader-text" for="user_20">Select *username*</label>
<input type="checkbox" name="users[]" id="user_20" class="subscriber" value="20">
</th>
<td class="username column-username has-row-actions column-primary" data-colname="Username">
<img alt="" src="*imageurl" class="avatar avatar-32 " height="32" width="32" style="height:32px;width:32px">
<strong><a href="edituserurlinwpadmin">*username*</a></strong><br><div class="row-actions">
<span class="edit"><a href="*edituserurlinwpadmin*">Edit</a> | </span><span class="delete">
<a class="submitdelete" href="users.php?action=delete&user=20&_wpnonce=091d3cc8bb">Delete</a> | </span><span class="view">
<a href="viewuserinwpadmin" aria-label="View posts by *user's name*">View</a> </span></div>
<button type="button" class="toggle-row"><span class="screen-reader-text">Show more details</span> </button> </td>
<td class="name column-name" data-colname="Name">*user's firstname & lastname*</td>
<td class="email column-email" data-colname="Email"><a href="mailto:test@test.com">test@test.com</a></td>
<td class="role column-role" data-colname="Role">Subscriber</td><td class="posts column-posts num" data-colname="Posts">0</td>
<td class="heateor_ss_delete_profile_data column-heateor_ss_delete_profile_data" data-colname="Delete Social Profile">
<a href="javascript:void(0)" title="Click to delete social profile data" alt="Click to delete social profile data" onclick="javascript:heateorSsDeleteSocialProfile(this, 20)">Delete</a></td></tr>
答案 0 :(得分:1)
您可以直接编写与您已经拥有的电子邮件ID 相匹配的xpath,并可以获得 ID 。
xpath :
//a[text()='test@test.com']/preceding-sibling::input
如果要使其更具动态性,可以采用以下方法:
//a[text()='"+emailId+"']/preceding-sibling::input
其中 emailId 将是一个字符串,其中包含您所需的电子邮件ID。
现在,您可以像这样编写简单的Java代码:
String userId = driver.findElement(By.xpath("//a[text()='test@test.com']/preceding-sibling::input")]/preceding-sibling::input")).getAttribute("id");
System.out.println(userId);
您可以仅更改xpath以进行动态使用。
希望这会有所帮助。
更新:
由于th
是preceding-sibling
中的anchor tag
,因此您得到了正确的结果。
//a[text()='test@test.com']/preceding-sibling::th/input