java - Selenium - 如何在页面中以多种形式查找相同的元素

标签 java selenium xpath selenium-webdriver

我有一个页面,其中有多个表单,并且所有表单都具有相同类型的字段。我需要找到“检测日期”的所有值并将其与输入进行比较。 我的问题是如何从所有检测日期元素中获取日期时间?一个页面可能有 5-6 个检测日期值

我尝试过,但没有成功

List<WebElement> list = driver.findElements(By.xpath("//td[contains(@class, 'CellHeaderRight') and   text()='Detection Date']"));
 System.out.println("Number of Date Fields " + list.size());

它给了我 0

<form id="idFrmUpdatePlateNumber" onsubmit="UpdatePlateNumber(1); return false;" 
action="" method="post" ,="" name="frmUpdatePlateNumber">
<table width="100%" cellspacing="0" cellpadding="3" border="1" style="background-color:#f9f9f9;">
<tbody>
<tr>
<tr>
<tr>
<td class="CellHeaderRight" width="1%" nowrap="nowrap">Detection Date:</td>
<td>1/20/2015 10:56:31 PM</td>
.....
</tr>
<form id="idFrmUpdatePlateNumber" onsubmit="UpdatePlateNumber(2); return false;" action="" method="post" ,="" name="frmUpdatePlateNumber">
<table width="100%" cellspacing="0" cellpadding="3" border="1" style="background-color:#f9f9f9;">
<tbody>
<tr>
<tr>
<tr>
<td class="CellHeaderRight" width="1%" nowrap="nowrap">Detection Date:</td>
<td>1/20/2015 10:55:02 PM</td>

这是附加的 HTML

<div id="idDivSearchResults" class="" style="display: block;">
table width="100%" cellspacing="0" cellpadding="5" border="0">
<tbody>
<tr>
<td>
<div style="border-width:1px; border-style:inset; background-   color:#d0d0d0; padding:10px;">
<table width="100%" cellspacing="0" cellpadding="5" border="0">
<tbody>
<tr>
<td>
<b>Event Details</b>
<form id="idFrmUpdatePlateNumber" onsubmit="UpdatePlateNumber(0); return false;" action="" method="post" ,="" name="frmUpdatePlateNumber">
<table width="100%" cellspacing="0" cellpadding="3" border="1" style="background-color:#f9f9f9;">
<tbody>
<tr>
<td class="CellHeaderRight" width="1%" nowrap="nowrap">Plate Number:</td>
<td>
</tr>
<tr>
<tr>
<td class="CellHeaderRight" width="1%" nowrap="nowrap">Detection Date:</td>
<td>1/20/2015 11:59:59 PM</td> 
</tr>

最佳答案

您提供的 XPath 表达式会将 td 元素与 Detection Date: 文本相匹配,而您需要下一个 td 元素。使用following-sibling :

//td[contains(@class, 'CellHeaderRight') and .='Detection Date:']/following-sibling::td[1]

请注意,检测日期之后还缺少一个:

您还可以检查以检测日期开头的文本:

//td[contains(@class, 'CellHeaderRight') and starts-with(., 'Detection Date')]/following-sibling::td[1]
<小时/>

此外,在搜索检测日期之前,您可能需要明确等待表单的显示:

WebDriverWait wait = new WebDriverWait(webDriver, 5);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("idFrmUpdatePlateNumber")));

// find dates

如果搜索结果位于iframe内,您需要先切换到它:

driver.switchTo.frame("Frame_ID_or_Name");

// find dates

关于java - Selenium - 如何在页面中以多种形式查找相同的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28632642/

相关文章:

Java - 分割目录路径的正则表达式

java - 动态检索对象、Spring MVC、JSP

java - 简单测试中的 NoClassDefFoundError

java - 如何在 selenium webdriver 中使用 css 检查按钮是否被禁用

html - 将 HTML 表格解析为 Groovy 列表?

java - 通过 java 从网络机器连接到 Oracle 11g 失败

python - 如何使用 Selenium 点击按钮?

javascript - 使用 python selenium 在浏览器中编辑元素

java - 在新窗口中查找 xpath 位置,单击后打开。使用 java 和 selenium

xml - XPath如何处理XML namespace ?