当前位置: 首页 > 知识库问答 >
问题:

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

王君墨
2023-03-14

我刚开始玩硒,我正在寻找一些帮助。在我试图测试的网页上,我有一个搜索按钮,当页面加载时,我有一个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测试来执行屏幕快照中的搜索,但我很难找到如何修改单元测试,以便正确地等待搜索完成,然后在页面上返回结果后,单击搜索结果表第一行中的第一项。

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);
        }
    } 
List<WebElement> rowCells = row.findElements(By.tagName("td"));

共有1个答案

宗政卓
2023-03-14
driver.findElement(By.xpath("//table[@id='search-results-table']/tbody/tr[‌​1]/td[5]/a")).click(); 
 类似资料:
  • 我有一个函数,它打开一个模式,并根据如下条件在对话框中显示错误消息 因此,正如您所看到的,我添加了一个要显示在对话框上的链接,但我如何确定用户何时点击了该链接?然后我希望它调用一个按钮点击 以便最终调用对话框关闭选项 所以基本上,当一个链接被点击时,它会将你重定向到那个页面,并为你关闭对话框。

  • 我正在做一个网络抓取,我可以在一个特定的链接中获取信息,但是我想通过去那个页面上每个项目的链接来自动化这个过程,然后获取信息回到主页,然后点击下面项目的链接。 网址是:https://ca.iherb.com/c/Vitamins?noi=48 我想点击“加州黄金营养、黄金C、维生素C、1000毫克、60粒蔬菜胶囊”项目,然后点击底部的“查看所有评论”。然后返回主页并单击以下项目的链接。 我使用此

  • 我正在为我的Data Structures类编写一个项目,该项目要求我编写一个类来实现INT的链接列表。 为节点使用内部类 包括以下方法 编写一个测试程序,使您能够以任意顺序使用所需的任何数据测试所有方法 我必须创建一个名为“public int deleteFromFront()”的方法。此方法旨在“删除列表前面的节点,并返回其中的int,如果列表为空,则返回null。”下面是我的代码。然而,当

  • 我想在点击后获取页面的页面源。然后使用browser.back()函数返回。但是Selenium不会让页面在点击后完全加载,并且由JavaScript生成的内容不包含在该页面的页面源中。

  • 我有一个动态加载的页面,其中包含一个按钮。我正在尝试等待selenium使用C#绑定点击按钮。我有以下代码: 不过这不管用。click事件永远不会被触发。selenium脚本不会抛出异常警告ID为“addInspectionButton”的元素不存在。它只是不能点击它。如果我加一根线。Sleep(3000)在wait语句和我获得按钮元素句柄的那一行之间。 我没有使用预期条件.元素在这里正确点击吗?

  • 问题内容: 我只是想知道,如何让浏览器在单击链接之前等待?我的目标是从动态网页抓取内容,内容是动态的,但我设法获取表单ID。唯一的问题是,提交按钮仅在2-3秒后显示。但是,我的Firefox驱动程序在页面加载后立即开始单击链接(不是动态部分)。 有什么办法可以让我的浏览器等待2-3秒,直到出现提交按钮?我尝试使用它,但是它暂停了所有操作,提交按钮在显示期间没有出现,但是在2-3秒后显示。 问题答案