在Selenium

时间:2017-04-03 11:47:30

标签: java selenium selenium-webdriver ui-automation

我有一张表" Foo"链接,在开始它将永远是20。 点击链接后我可能有一个按钮。

我想编写一个程序,其中包含两个功能:

点击第一个" Foo"链接和:

  1. 如果按钮可见则单击它,返回,然后再次单击第一个" Foo链接"。点击后旧的消失了,但在底部会添加一个新的,
  2. 如果按钮不可见,请返回并选择" Foo"下一行中的链接(添加到计数器偏移量)。
  3. 我尝试使用以下代码:

    List<WebElement> elements = driver.findElements(By.linkText("Never"));
        System.out.println(driver.findElements(By.linkText("Foo")).size());
            int nextRow=0;
            int uncleanedSubmissions = 0;
            int cleanedSubmissions = 0;
            System.out.println(nextRow);
            do {
                elements.get(nextRow).click();
                Helper.sleep(3000, driver);
                if (driver.findElement(By.className("button")).isDisplayed()) {                 
                    driver.findElement(By.className("button")).click();
                    driver.get(baseUrl);
                    cleanedSubmissions++;
                    System.out.println(nextRow);
                } else if (!(driver.findElement(By.className("button").isDisplayed())) {
                    uncleanedSubmissions++;
                    nextRow++;
                    System.out.println(uncleanedSubmissions + ". submission has not been cleaned");
                    driver.get(baseUrl);
                }
            } while (nextRow < 20);
    

    它被简化以防止长类名称和等待行,这在这里并不重要。

    当我执行此代码时,出现错误:java.lang.IndexOutOfBoundsException: Index: 0, Size: 0

    在我看来,因为我试图点击&#34; Foo&#34;链接不正确(elements.get(nextRow).click();无法以这种方式使用nextRow。)

    应该如何实施?

    HTML代码:

        <table class="taglib-search-iterator" data-searchcontainerid="_151_workflowInstancesSearchContainer">
    <tbody>
    <tr class="portlet-section-header results-header">
    <tr class="lfr-template portlet-section-body results-row">
    <tr class="portlet-section-body results-row">
    <tr class="portlet-section-alternate results-row alt">
    <tr class="portlet-section-body results-row">
    <tr class="portlet-section-alternate results-row alt">
           <td id="col-end-date_row-5" class="align-left">
                <a href="FooLink">Foo</a>
          </td>
    </tr>
    <tr class="portlet-section-body results-row">
    <tr class="portlet-section-alternate results-row alt">
    <tr class="portlet-section-body results-row">
    <tr class="portlet-section-alternate results-row alt">
           <td id="col-end-date_row-9" class="align-left">
                <a href="FooLink">Foo</a>
          </td>
    </tr>
    <tr class="portlet-section-body results-row">
    <tr class="portlet-section-alternate results-row alt">
    <tr class="portlet-section-body results-row">
    <tr class="portlet-section-alternate results-row alt">
    <tr class="portlet-section-body results-row">
    <tr class="portlet-section-alternate results-row alt">
    <tr class="portlet-section-body results-row">
    <tr class="portlet-section-alternate results-row alt">
    <tr class="portlet-section-body results-row">
    <tr class="portlet-section-alternate results-row alt">
    <tr class="portlet-section-body results-row">
    <tr class="portlet-section-alternate results-row alt last">
    </tbody>
    </table>
    

    其他tr完全相同 - 为示例扩展了一个。

    带有按钮的页面示例正好(不包括其他css问题,没有iframe):

    <a id="button" class="taglib-icon" href="Linkhere">
    

    但是这个页面不包含任何重要内容。

    编辑2: 我已将代码更改为如上所述 - 在第一次运行时出现错误StaleElementReferenceException: The element reference is stale.,指向elements.get(nextRow).click();(得到1. submission has not been cleaned日志) - 第一次运行是第二种情况 我会继续努力解决它

1 个答案:

答案 0 :(得分:1)

由于您的清单大小为'20'     int Number = driver.findElements(By.linkText(“Foo”))。size();

您应该将while条件的代码更改为while(nextRow&lt; 20);而是(nextRow&lt; = 20);