循环浏览网页元素并点击每个链接

时间:2018-03-07 21:42:00

标签: java selenium selenium-webdriver webdriver

我的代码工作我的目标是循环遍历表中的每个元素,然后单击元素,这样我就可以转到下一页,基本上我想这样做

1 click element form drop down
2 //code some stuff
3 Go back 
4 click next element from drop down 
5 code some stuff and etc

我的代码:

List<WebElement> CCTable = driver.findElements(By.id("companyIdBarCompListGrid_rows_scrollpane"));
     for ( WebElement client: CCTable) { 
         System.out.println("\n"+client.getText().substring(0, 20)+"\n");
        client.click();
        Thread.sleep(10000);

    }

enter image description here

我的问题是它在eclipse **中查找并打印出我的**控制台中的文本,但它没有点击链接或每个链接。

我正在尝试按照这里的建议https://sqa.stackexchange.com/questions/12790/how-to-iterate-over-a-collection-of-items-in-selenium-webdriver但是没有成功,任何帮助都会受到赞赏。

如果我做错了什么,请帮助我。任何帮助将不胜感激

PP_OBJ_CycleData.CCdropdown(驱动程序)。单击();

    List<WebElement> CCTable = driver.findElements(By.cssSelector("div#companyIdBarCompListGrid_rows_scrollpane table tbody tr[id*=companyIdBarCompListGrid_] td span div a"));
        // inner 4 loop 
        for ( WebElement ccode: CCTable) { 

             System.out.println("\n"+ccode.getText().substring(0, 20)+"\n");
             System.out.println("Number of links: " + CCTable.size());
             Thread.sleep(3000);

             ccode.click();



Thread.sleep(5000);

driver.findElement(By.xpath("//*[@id='companyIDBarContentPane']//span"));

            }// End Inner 4 loop



    PP_OBJ_CycleData.ReturnToSupport(driver);

这也是在eclipse控制台中:

enter image description here

似乎获取文本没有获得其他公司代码名称。它点击了第一个名字后再没有循环,我点击了 org.openqa.selenium.StaleElementReferenceException:陈旧元素引用:元素未附加到页面文档。

2 个答案:

答案 0 :(得分:4)

问题是你在识别错误​​的东西

ID指向DIV。而且只有一个DIV;什么都没有迭代。虽然DIV是可点击的,但点击DIV什么都不做。

相反,您需要找到A标签。这在桌子上可能非常困难;并且所有的ID都没有帮助。

基本上你想要的东西是:

List<WebElement> CCTable = driver.findElements(By.cssSelector("div#companyIdBarCompListGrid_rows_scrollpane table tbody tr[id*=companyIdBarCompListGrid_] td span div a");

你可能不得不玩它。您可以在List声明之后添加此行:

System.out.println("Number of links: " + CCTable.size());

如果符合您的期望,您就找到了正确的findElements字符串。

答案 1 :(得分:1)

这是一个工作循环:

    String selector = "div#companyIdBarCompListGrid_rows_scrollpane table tbody tr[id*=companyIdBarCompListGrid_] td span div a";
    int links = driver.findElements(By.cssSelector(selector)).size();
    System.out.println("Number of links: " + links);

    for (int i = 0; i < links; i++) {
        List<WebElement> CCTable = driver.findElements(By.cssSelector(selector));
        WebElement client = CCTable.get(i);
        System.out.println("\n"+client.getText().substring(0, 20)+"\n");
        client.click();

        // Things happen here

    }