【问题标题】:How do i fetch all the values of for loop which need to be separate and need to make a total of separated values我如何获取 for 循环的所有值,这些值需要分开并且需要总计分开的值
【发布时间】:2019-11-14 20:46:51
【问题描述】:

我正在自动从弹出窗口中抓取数据,其中包含 542 个值,例如 12/34、45/76、97/23 等。

我试图在控制台上打印这些值,然后分开并显示“/”之前和“/”之后的值的总和,例如 12+457+97 和 34+76+23。

我的以下代码正在执行并打印前 10 个值,但遇到错误:

"ArrayIndexOutOfBoundsException:1".

listOfActualValues.size() 的值显示正确的值,即 542。 下面的代码是从一列中获取值,其余 3 列工作正常,无需向下滚动并打印所有 542 个值。

int sum1=0; int sum2=0; int value1 = 0; int value2 = 0; int finalsum1=0; int finalsum2=0;
for(int av=va+1; av<listOfActualValues.size(); av++)

             { 
                System.out.format("%25s",listOfActualValues.get(av).getText());

                String str1 = listOfActualValues.get(av).getText().split("/")[1];
                String str2 = listOfActualValues.get(av).getText().split("/")[0];
                      value1 = Integer.parseInt(str1);
                      value2 = Integer.parseInt(str2);
                 }
         sum1 =sum1+value1;
         sum2 = sum2+value2;
         finalsum1 = sum1;
         finalsum2 = sum2;

         }
         System.out.println(finalsum1);
         System.out.println(finalsum2);

当我为另一个在单个列中只有 4 个值的弹出窗口运行相同的代码时,它的运行绝对正确。我是否需要使用 Javascript 向下滚动。

//div[3]/table/tbody/tr[*]/td[contains(text(), '' )][3],它的标签给了我 542 个元素 td style="width: 100px; color: #333; font-size: 14px; text-align:center;" xpath="2"> 1667/3818

【问题讨论】:

    标签: selenium


    【解决方案1】:

    如果没有看到您正在自动化的页面,就很难判断这里需要什么解决方案。但是,您提到您可能需要使用 Javascript 向下滚动。首先,这是一个 generic 向下滚动的方法——它只是使用窗口大小作为参数向下滚动。如果需要,您可以调整数字以自定义您的功能:

    // declare JS executor
    JavascriptExecutor executor = (JavascriptExecutor)driver;
    
    // scroll down using JS and window size -- this scrolls down 250 pixels
    executor.executeScript("window.scrollBy(0,250)");
    

    如果您想要更具体的滚动方法,例如向下滚动到特定元素,语法会有所改变:

    // declare JS executor
    JavascriptExecutor executor = (JavascriptExecutor)driver;
    
    // this is the element you want to scroll down to
    WebElement myWebElement = driver.findElement(someLocatorHere);
    
    // scroll down using JS -- this scrolls down to the web element you pass in
    executor.executeScript("arguments[0].scrollIntoView(true);", myWebElement);
    

    希望这会有所帮助。

    【讨论】:

    • 只需在下一行 45/76 中将值打印为 12/34,依此类推。基本上它在单个列中打印所有值。但是只打印到 10 个值,然后它就会出错。谢谢,你上面的建议都试过了,但同样的错误。
    • 我不确定您的代码为什么不起作用,因为我看不到网页上的内容——发布 HTML 会有所帮助。您的 for 循环也无法编译,因为缺少括号(我假设也缺少循环的部分)。看起来[0][1] 索引访问器正在抛出错误。也许listOfActualValues.get(av).getText() 返回的项目中没有/ 字符,因此对String str1 = listOfActualValues.get(av).getText().split("/")[1] 的访问会引发错误。
    • 很难发布 html 代码,只是用“/”确认它存在于所有 542 个值中,并且它给出的前 10 个值是正确的。下一个弹出窗口使用了相同的代码,它只有 4 个值并且运行良好。是的,其他 3 列正在打印所有 542 个值而无需向下滚动。
    • 基于这个描述......它适用于某些输入,不适用于其他输入,适用于前 10 个值,然后失败等等,如果没有任何额外的上下文,它真的不可能解决比如页面 HTML 或完整的代码示例。
    • //div[3]/table/tbody/tr[*]/td[contains(text(), '' )][3] 这行给了我 542 个元素(td)。每个 td 包含一些值 1667/3818 并获取值 1667/3818...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多