我刚开始玩硒,我正在寻求帮助。在我试图测试的网页上,我有一个搜索按钮,当页面加载时,我有一个html表,显示在它下面,带有结果。
搜索结果表的html如下......
<table id="search-results-table" style="width: 1561px;">
<thead>
<tr role="row" style="height: 0px;">
<th><div>Item Description</div></th>
<th><div>Size</div></th>
<th><div>Colour</div></th>
<th><div>Supply Style</div></th>
<th><div>Item #</div></th>
</tr>
</thead>
<tbody>
<tr role="row" class="odd">
<td class="left sorting_1 ">EASY STEPS TAC LILYPAD PUMP:GREEN:10</td>
<td class=" center">10</td>
<td class=" center">GREEN</td>
<td class=" center">TAC</td>
<td class=" center"><a href="javascript:setItemNumber(217592380);">217592380</a></td>
</tr>
</tbody>
</table>
使用selenium IDE我能够找出如何创建一个junit测试来进行像屏幕截图中的那样搜索,但我正在努力弄清楚如何修改单元测试以正确等待搜索到完成,然后在页面上返回结果后,单击搜索结果表第一行中的第一项。
感谢有人可以提供帮助。下面是我到目前为止尝试过的代码,但它没有为我的表返回任何td。对不起,我是一个真正的初学者。
public class MySearch {
private WebDriver driver;
private String baseUrl;
private boolean acceptNextAlert = true;
private StringBuffer verificationErrors = new StringBuffer();
@Before
public void setUp() throws Exception {
//driver = new FirefoxDriver();
File file = new File("C:/selenium/IEDriverServer.exe");
System.setProperty("webdriver.ie.driver", file.getAbsolutePath());
driver = new InternetExplorerDriver();
baseUrl = "http://myBaseUrl";
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
}
@Test
public void testSearch() throws Exception {
driver.get(baseUrl + "/wps/portal/mySearchUrl");
driver.findElement(By.id("keywords")).clear();
driver.findElement(By.id("keywords")).sendKeys("BLACK SHOES");
driver.findElement(By.id("searchButton")).click();
navigateToDetail();
}
public void navigateToDetail() throws Exception {
//find tbody
WebElement table = driver.findElement(By.id("search-results-table"));
//get all rows
List<WebElement> allRows = table.findElements(By.tagName("tr"));
//iterate through the rows
for (WebElement row : allRows) {
//get the rowCells in each row
List<WebElement> rowCells = row.findElements(By.tagName("td"));
int indexofColumnwhichhasProjectname = 4;
//get the column which contains the item no and get text
String itemNo = rowCells.get(indexofColumnwhichhasProjectname).getText();
System.out.println(itemNo);
}
}
当通过输出进行调试时,我尝试获取td的部分不会返回任何内容,因此当我尝试获取索引4时它会返回arryIndexOutOfBounds。
List<WebElement> rowCells = row.findElements(By.tagName("td"));
答案 0 :(得分:3)
感谢Alecxce的帮助。最后,我发现了一个xpath表达式。
driver.findElement(By.xpath("//table[@id='search-results-table']/tbody/tr[1]/td[5]/a")).click();
答案 1 :(得分:1)
明确等待搜索结果可见:
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("search-results-table")));