如何等待,然后单击html表中的第一个链接

时间:2015-07-27 03:56:38

标签: java selenium selenium-webdriver

我刚开始玩硒,我正在寻求帮助。在我试图测试的网页上,我有一个搜索按钮,当页面加载时,我有一个html表,显示在它下面,带有结果。

enter image description here

搜索结果表的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"));

2 个答案:

答案 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")));