Selenium选择并点击正确的链接

时间:2013-08-06 08:44:17

标签: c# selenium

对于相同类型的数据,请不要厌倦不断回答我的问题。我正在使用Selenium和c#作为我的应用程序。在这里,我还有一个包含以下内容的网页:

Description     App Name    Information
 Some Desc1     App1         Some Info
 Some Desc2     App2         Some Info
 Some Desc3     App2         Some Info
 Some Desc4     App3         Some Info
 Some Desc5     App4         Some Info

正如我之前的问题所述,在我的应用程序中,用户输入了他自己选择的appname。那个appname我把它存储在一个变量中。我需要做的是,我希望selenium搜索该appname,并且必须点击相应的描述。

一个示例场景是:如果用户输入APP2,那么selenium应该搜索appname“App2”,之后它应该点击Some Desc2,然后一段时间之后它应该点击一些Desc3。对于您的信息,所有“一些描述”链接都没有类名,没有ID,并且具有相同的标记名。

1 个答案:

答案 0 :(得分:0)

试试这个:

driver.findElement(By.id("table-id"));
List<WebElement> rows = table.findElements(By.tagName("tr"));
for (WebElement row : rows) {
    List<WebElemebt> cells = row.findElements(By.tagName("td"));
    if (cells[1].getText().equals("AppNameYouWantToFind")) {
        cells[0].click();
    }
}

我希望你能理解这里发生了什么,但无论如何我都会描述它。

首先,您会找到包含相关数据的table。然后,您在该表中找到每个rows,形成一个webelemebts列表。然后,对于每个行,您可以创建所有cells的列表。由于您的表格布局,您知道App Name数据位于列表中的第二个单元格中,'index = [1]'。因此,对于您想要的搜索字词进行比较 - 如果匹配,请点击前面的cell

这是Java中的我害怕,你必须将其转换为c#。

更新的答案

driver.findElement(By.id("table-id"));
List<WebElement> rows = table.findElements(By.tagName("tr")); //get list to know how many times to loop
for (int i=0; i<rows.length(); i++) {
    rows = table.findElements(By.tagName("tr")); //this is required as you'll be 'refreshing' the list to avoid 'stale element exceptions' after going back
    List<WebElemebt> cells = rows[i].findElements(By.tagName("td"));
    if (cells[1].getText().equals("AppNameYouWantToFind")) {
        cells[0].click();
        //do what you need to do on the new page
        driver.navigate.back();
    }
}