【问题标题】:Loop through Web Elements and Click each link循环浏览 Web 元素并单击每个链接
【发布时间】:2018-03-07 21:41:59
【问题描述】:

嗨,我的代码有效我的目标是遍历表中的每个元素并单击该元素,这样我就可以转到下一页基本上我想做这个

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);

    }

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

我正在尝试遵循https://sqa.stackexchange.com/questions/12790/how-to-iterate-over-a-collection-of-items-in-selenium-webdriver 此处的建议,但如果没有成功,我们将不胜感激。

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


PP_OBJ_CycleData.CCdropdown(driver).click();

    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 控制台中:

似乎获取文本没有获取其他公司代码名称。并且它在单击名字后不再循环,我单击我得到 org.openqa.selenium.StaleElementReferenceException:过时的元素引用:元素未附加到页面文档。

【问题讨论】:

  • 点击第二个链接失败时是否收到错误信息?

标签: java selenium selenium-webdriver webdriver


【解决方案1】:

问题是你识别错误

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 字符串。

【讨论】:

  • 谢谢!
  • 还有另一个问题,它没有循环点击上面的下拉代码
  • 堆栈跟踪是 :org.openqa.selenium.StaleElementReferenceException: stale element reference: element is not attach to the page document
  • 任何额外的帮助表示赞赏
  • @Jonathan,根据您的原始帖子:当您离开页面并返回时,WebElement 不再链接。完成您正在尝试的混合方法是:(1)获取列表,以便您知道您有多少链接(2)使用链接计数开始循环(3)INSIDE循环,再次获取列表(不同的变量)(4)使用第二个变量作为链接单击(5)重复循环。基本上,您每次访问该页面时都需要重新阅读链接,以免它们“过时”。但是您需要一次读取列表,以便知道迭代循环的时间。
【解决方案2】:

这是一个工作循环:

    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

    }

【讨论】:

  • 这行得通,我现在可以按照你的做法把它分开练习用其他变体进行编码......谢谢。我知道我已经一路走来,但我还有很多东西要学。再次感谢:)
猜你喜欢
  • 1970-01-01
  • 2012-05-25
  • 1970-01-01
  • 1970-01-01
  • 2014-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-01
相关资源
最近更新 更多