硒选择并点击正确的链接

本文关键字:链接 选择 | 更新日期: 2023-09-27 18:26:31

请不要厌倦为相同类型的数据连续回答我的问题。我的应用程序使用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,然后在一段时间后单击Some Desc3。供您参考,所有"some Desc"链接都没有类名,没有id,并且具有相同的标记名。

硒选择并点击正确的链接

试试这个:

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,形成一个webelemebt列表。然后,为这些行中的每一行创建一个所有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();
    }
}