0

请不要厌倦连续回答我的相同类型数据的问题。我在我的应用程序中使用 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我已经将它存储在一个变量中。我需要做的是,我希望 selenium 搜索该应用程序名称,并且它必须单击相应的描述。

一个示例场景是:如果用户输入 APP2,那么 selenium 应该搜索应用名称“App2”,然后首先它应该单击 Some Desc2,然后在一段时间后它应该单击某个 Desc3。供您参考,所有“一些 Desc 的”链接都没有类名、没有 id 并且具有相同的标记名。

4

1 回答 1

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();
    }
}
于 2013-08-06T10:12:17.107 回答