簡體   English   中英

使用 Selenium - 我如何 select 每行隨機一個元素?

[英]With Selenium - how can I select one element per row randomly?

我想 select 表格中每行一個元素。 行和列沒有那個實際值,它只是為了測試。

該行的 cssSelector 是div.table_row
單元格的 cssSelector 是div.table_cell

如何隨機 select 每行這 5 列中的一個元素,然后移動到下一行和 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 個單選按鈕,測試將失敗。

請參閱此處的表格圖像。

在 Java 中的 selenium 中嘗試此操作。 我不熟悉 cssSelectors 中的父元素和子元素。
XPath 不在討論范圍內,因為類是隨機生成的,每次都會失敗。

我希望它是這樣的。

謝謝!

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>

我可以提供一些代碼來幫助您入門。 此代碼將首先查找所有表行,然后在每行中選擇一個隨機單元格到 select。 我實際上沒有在您提供的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循環,因為我們不想查看第一行的列標題 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() range. rnd.nextInt(cells.size()返回一個從 0 到cells.size()int 。但是,我們想跳過 0 的情況,所以我們將+ 1添加到結果中。但是,然后我們遇到out of bounds潛在問題,因此我們將- 1添加到cells.size()

這段代碼實際上是請求一個從 0 到size() - 1的隨機 int,然后在結果中加 1,所以我們得到從 1 到size()的隨機 int,這使我們能夠跳過我們沒有的第一列單元格想點擊。

您可以嘗試這樣的方法:

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();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM