笔者曾经得到一个需求,说是要来获取如下图所示的内容(注:百度只是我做的一个例子):
package com.mytest; import java.util.List; import java.util.concurrent.TimeUnit; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; /* * * 测试百度搜索框输入某个数据之后自动弹出的下拉列表 * author:Kiven * 部分信息参考于网络 */ public class BaiduTable { private WebDriver driver; BaiduTable(WebDriver driver){ this.driver = driver; } public static void main(String args[]) throws InterruptedException{ WebDriver driver; String DriverPath = "F:\\AutoTest\\selenium\\chromedriver.exe"; System.setProperty("webdriver.chrome.driver",DriverPath); driver = new ChromeDriver(); driver.get("http://www.baidu.com"); //搜索框 driver.findElement(By.id("kw")).sendKeys("test"); //等待元素出现 driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); BaiduTable table = new BaiduTable(driver); //table的ID By by = By.id("st"); //String address = "2.0"; //取第三行第一列的值(该table只有一列) //取出全部10行的数据 String address[] = {"0.0","1.0","2.0","3.0","4.0","5.0","6.0","7.0","8.0","9.0"}; for(int i=0;i<address.length;i++){ System.out.println(table.getCellText(by, address[i])); } driver.quit(); } /** 从一个table的单元格中得到文本值. 参数tableCellAddress的格式为row.column, 行列从0开始. @param by 用于得到table对象 @param tableCellAddress 一个单元格地址, 如. "1.4" 行 列 @return 从一个table的单元格中得到文本值 */ public String getCellText(By by,String tableCellAddress){ //得到table元素对象 WebElement table = driver.findElement(by); //对所要查找的单元格位置字符串进行分解,得到其对应行、列。 int index = tableCellAddress.trim().indexOf('.'); int row = Integer.parseInt(tableCellAddress.substring(0, index)); int cell = Integer.parseInt(tableCellAddress.substring(index+1)); //得到table表中所有行对象,并得到所要查询的行对象 List<WebElement> rows = table.findElements(By.tagName("tr")); WebElement theRow = rows.get(row); //调用getCell方法得到对应的列对象,然后得到要查询的文本。 String text = getCell(theRow, cell).getText(); return text; } private WebElement getCell(WebElement Row,int cell){ List<WebElement> cells; WebElement target = null; //列里面可能有"<th>"、"<td>"两种标签,所以分开处理。 if(Row.findElements(By.tagName("th")).size()>0){ cells = Row.findElements(By.tagName("th")); target = cells.get(cell); } if(Row.findElements(By.tagName("td")).size()>0){ cells = Row.findElements(By.tagName("td")); target = cells.get(cell); } return target; } }