使用 Selenium - 我如何 select 每行随机一个元素?
With Selenium - how can I select one element per row randomly?
我想 select 在 table 中每行一个元素。行和列没有实际值,只是为了测试。
该行的 cssSelector 是 div.table_row。
单元格的 cssSelector 是 div.table_cell.
如何从每行的 5 列中随机 select 一个元素,然后移动到下一行并随机 select 另一个元素?
我尝试这样做,但当然失败了:
Random rnd = new Random();
List<WebElement> button = driver.findElements(By.cssSelector(RADIO_BUTTON));
button.get(rnd.nextInt(button.size())).click();
其中 RADIO_BUTTON 是 cssSelector div.radio_button。
这将随机 select 10 个单选按钮,测试将失败。
查看 table 图片 here。
在 Java 的 selenium 中尝试这个。
我不熟悉 cssSelectors 中的父元素和子元素。
XPath 不在讨论之列,因为 类 是随机生成的,每次都会失败。
我希望它像 this.
谢谢!
HTML 页面来源:
<div class="sc-eIHaNI ccrdop">
<div id="question_container_54220043">
<div>
<div style="position: relative; overflow: hidden; width: auto; height: auto; min-height: 554px; max-height: 200px;">
<div style="position: relative; overflow: scroll; margin-right: -17px; margin-bottom: -17px; min-height: 571px; max-height: 217px;">
<div class="sc-dXLFzO oUzRG">
<div class="table sc-dlyikq fIjTup">
<div class="table_row sc-blIhvV iCLgRI">
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-glUWqk iezKaA">
<div class="sc-bTiqRo bfwdoK">
<div class="table_cell_text"></div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-glUWqk ddQJUy">
<div class="sc-bTiqRo bfwdoK">
<div class="table_cell_text">
<div class="text" style="width: 100%;">a</div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-glUWqk ddQJUy">
<div class="sc-bTiqRo bfwdoK">
<div class="table_cell_text">
<div class="text" style="width: 100%;">b</div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-glUWqk ddQJUy">
<div class="sc-bTiqRo bfwdoK">
<div class="table_cell_text">
<div class="text" style="width: 100%;">c</div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-glUWqk ddQJUy">
<div class="sc-bTiqRo bfwdoK">
<div class="table_cell_text">
<div class="text" style="width: 100%;">d</div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-glUWqk ddQJUy">
<div class="sc-bTiqRo bfwdoK">
<div class="table_cell_text">
<div class="text" style="width: 100%;">e</div>
</div>
</div>
</div>
</div>
</div>
<div class="table_row sc-blIhvV heofGg">
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-glUWqk bxqvJw">
<div class="sc-bTiqRo bfwdoK">
<div class="table_cell_text">
<div class="text" style="width: 100%;">1</div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
</div>
<div class="table_row sc-blIhvV heofGg">
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-glUWqk bxqvJw">
<div class="sc-bTiqRo bfwdoK">
<div class="table_cell_text">
<div class="text" style="width: 100%;">2</div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
</div>
<div class="table_row sc-blIhvV heofGg">
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-glUWqk bxqvJw">
<div class="sc-bTiqRo bfwdoK">
<div class="table_cell_text">
<div class="text" style="width: 100%;">3</div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
</div>
<div class="table_row sc-blIhvV heofGg">
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-glUWqk bxqvJw">
<div class="sc-bTiqRo bfwdoK">
<div class="table_cell_text">
<div class="text" style="width: 100%;">4</div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
</div>
<div class="table_row sc-blIhvV heofGg">
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-glUWqk bxqvJw">
<div class="sc-bTiqRo bfwdoK">
<div class="table_cell_text">
<div class="text" style="width: 100%;">5</div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
</div>
<div class="table_row sc-blIhvV heofGg">
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-glUWqk bxqvJw">
<div class="sc-bTiqRo bfwdoK">
<div class="table_cell_text">
<div class="text" style="width: 100%;">6</div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
</div>
<div class="table_row sc-blIhvV heofGg">
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-glUWqk bxqvJw">
<div class="sc-bTiqRo bfwdoK">
<div class="table_cell_text">
<div class="text" style="width: 100%;">7</div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
您可以尝试这样的方法:
List<WebElement> tableRows = driver.findElements(By.cssSelector("div.table_row"));
// iterating over rows
for(WebElement row: tableRows){
// Count number of cells in a row
List<WebElement> columsInRows = row.findElements(By.cssSelector("div.table_cell"));
Random rnd = new Random();
// Take random item in a row
int cellIndexToClick = rnd.nextInt(columsInRows.size());
// Click that item
columsInRows.get(cellIndexToClick).click();
}
我可以提供一些代码来帮助您入门。此代码将首先找到所有 table 行,然后每行选择一个随机单元格到 select。我实际上没有在您提供的 HTML 中看到任何 radio_button
,所以我猜测并假设 <div class="table_cell_text"></div>
是单选按钮元素:
// init random
Random rnd = new Random();
// first get number of rows -- this returns 10
int rowCount = driver.findElements(By.xpath("//div[contains(@class, 'table_row')]")).size();
// then iterate the rows from 2-10 (WebElement lists are 1-based index, skip first header row)
for (int i = 2; i <= rowCount; i++)
{
// get radio buttons for this row -- use i to get the row index
// this returns 6
List<WebElement> cells = driver.findElements(By.xpath("//div[contains(@class, 'table_row')][" + i + "]//div[@class='table_cell_text']")
// get a random cell and click it -- start with 1 so we can skip first column
cells.get(rnd.nextInt((cells.size() - 1) + 1).click();
}
我在 2 处开始了 for
循环,因为我们不想查看带有列 headers a、b、c、d 等的第一行。我还指定了 rnd.nextInt
在 1 和 cells.size()
之间进行选择,这样我们就不会选择第一列中包含数据 1、2、3、4 等的单元格
我们使用行 cells.get(rnd.nextInt((cells.size() - 1) + 1).click();
来确保我们得到的列表索引大于 0,但仍在 cells.size()
范围内。 rnd.nextInt(cells.size()
returns 一个 int
从 0 到 cells.size()
。但是,我们想跳过 0 的情况,所以我们将 + 1
添加到结果中。但是,然后我们 运行 进入 out of bounds
潜在问题,所以我们将 - 1
添加到 cells.size()
.
这段代码实际上是请求一个从0到size() - 1
的随机整数,然后在结果上加1,所以我们得到了从1到size()
的随机整数,这样就可以跳过第一个我们不想点击的单元格列。
我想 select 在 table 中每行一个元素。行和列没有实际值,只是为了测试。
该行的 cssSelector 是 div.table_row。
单元格的 cssSelector 是 div.table_cell.
如何从每行的 5 列中随机 select 一个元素,然后移动到下一行并随机 select 另一个元素?
我尝试这样做,但当然失败了:
Random rnd = new Random();
List<WebElement> button = driver.findElements(By.cssSelector(RADIO_BUTTON));
button.get(rnd.nextInt(button.size())).click();
其中 RADIO_BUTTON 是 cssSelector div.radio_button。 这将随机 select 10 个单选按钮,测试将失败。
查看 table 图片 here。
在 Java 的 selenium 中尝试这个。
我不熟悉 cssSelectors 中的父元素和子元素。
XPath 不在讨论之列,因为 类 是随机生成的,每次都会失败。
我希望它像 this.
谢谢!
HTML 页面来源:
<div class="sc-eIHaNI ccrdop">
<div id="question_container_54220043">
<div>
<div style="position: relative; overflow: hidden; width: auto; height: auto; min-height: 554px; max-height: 200px;">
<div style="position: relative; overflow: scroll; margin-right: -17px; margin-bottom: -17px; min-height: 571px; max-height: 217px;">
<div class="sc-dXLFzO oUzRG">
<div class="table sc-dlyikq fIjTup">
<div class="table_row sc-blIhvV iCLgRI">
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-glUWqk iezKaA">
<div class="sc-bTiqRo bfwdoK">
<div class="table_cell_text"></div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-glUWqk ddQJUy">
<div class="sc-bTiqRo bfwdoK">
<div class="table_cell_text">
<div class="text" style="width: 100%;">a</div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-glUWqk ddQJUy">
<div class="sc-bTiqRo bfwdoK">
<div class="table_cell_text">
<div class="text" style="width: 100%;">b</div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-glUWqk ddQJUy">
<div class="sc-bTiqRo bfwdoK">
<div class="table_cell_text">
<div class="text" style="width: 100%;">c</div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-glUWqk ddQJUy">
<div class="sc-bTiqRo bfwdoK">
<div class="table_cell_text">
<div class="text" style="width: 100%;">d</div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-glUWqk ddQJUy">
<div class="sc-bTiqRo bfwdoK">
<div class="table_cell_text">
<div class="text" style="width: 100%;">e</div>
</div>
</div>
</div>
</div>
</div>
<div class="table_row sc-blIhvV heofGg">
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-glUWqk bxqvJw">
<div class="sc-bTiqRo bfwdoK">
<div class="table_cell_text">
<div class="text" style="width: 100%;">1</div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
</div>
<div class="table_row sc-blIhvV heofGg">
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-glUWqk bxqvJw">
<div class="sc-bTiqRo bfwdoK">
<div class="table_cell_text">
<div class="text" style="width: 100%;">2</div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
</div>
<div class="table_row sc-blIhvV heofGg">
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-glUWqk bxqvJw">
<div class="sc-bTiqRo bfwdoK">
<div class="table_cell_text">
<div class="text" style="width: 100%;">3</div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
</div>
<div class="table_row sc-blIhvV heofGg">
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-glUWqk bxqvJw">
<div class="sc-bTiqRo bfwdoK">
<div class="table_cell_text">
<div class="text" style="width: 100%;">4</div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
</div>
<div class="table_row sc-blIhvV heofGg">
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-glUWqk bxqvJw">
<div class="sc-bTiqRo bfwdoK">
<div class="table_cell_text">
<div class="text" style="width: 100%;">5</div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
</div>
<div class="table_row sc-blIhvV heofGg">
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-glUWqk bxqvJw">
<div class="sc-bTiqRo bfwdoK">
<div class="table_cell_text">
<div class="text" style="width: 100%;">6</div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
</div>
<div class="table_row sc-blIhvV heofGg">
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-glUWqk bxqvJw">
<div class="sc-bTiqRo bfwdoK">
<div class="table_cell_text">
<div class="text" style="width: 100%;">7</div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
<div class="table_cell sc-bYTsla iuJcfM" width="100px">
<div class="sc-gQNndl ebzAHe">
<div class="sc-MYvYT jmUCao">
<div class="radio_button sc-hwwEjo eTTyml">
<div class="sc-kPVwWT eocRsE"></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
您可以尝试这样的方法:
List<WebElement> tableRows = driver.findElements(By.cssSelector("div.table_row"));
// iterating over rows
for(WebElement row: tableRows){
// Count number of cells in a row
List<WebElement> columsInRows = row.findElements(By.cssSelector("div.table_cell"));
Random rnd = new Random();
// Take random item in a row
int cellIndexToClick = rnd.nextInt(columsInRows.size());
// Click that item
columsInRows.get(cellIndexToClick).click();
}
我可以提供一些代码来帮助您入门。此代码将首先找到所有 table 行,然后每行选择一个随机单元格到 select。我实际上没有在您提供的 HTML 中看到任何 radio_button
,所以我猜测并假设 <div class="table_cell_text"></div>
是单选按钮元素:
// init random
Random rnd = new Random();
// first get number of rows -- this returns 10
int rowCount = driver.findElements(By.xpath("//div[contains(@class, 'table_row')]")).size();
// then iterate the rows from 2-10 (WebElement lists are 1-based index, skip first header row)
for (int i = 2; i <= rowCount; i++)
{
// get radio buttons for this row -- use i to get the row index
// this returns 6
List<WebElement> cells = driver.findElements(By.xpath("//div[contains(@class, 'table_row')][" + i + "]//div[@class='table_cell_text']")
// get a random cell and click it -- start with 1 so we can skip first column
cells.get(rnd.nextInt((cells.size() - 1) + 1).click();
}
我在 2 处开始了 for
循环,因为我们不想查看带有列 headers a、b、c、d 等的第一行。我还指定了 rnd.nextInt
在 1 和 cells.size()
之间进行选择,这样我们就不会选择第一列中包含数据 1、2、3、4 等的单元格
我们使用行 cells.get(rnd.nextInt((cells.size() - 1) + 1).click();
来确保我们得到的列表索引大于 0,但仍在 cells.size()
范围内。 rnd.nextInt(cells.size()
returns 一个 int
从 0 到 cells.size()
。但是,我们想跳过 0 的情况,所以我们将 + 1
添加到结果中。但是,然后我们 运行 进入 out of bounds
潜在问题,所以我们将 - 1
添加到 cells.size()
.
这段代码实际上是请求一个从0到size() - 1
的随机整数,然后在结果上加1,所以我们得到了从1到size()
的随机整数,这样就可以跳过第一个我们不想点击的单元格列。