【问题标题】:java selenium how to use if elsejava selenium if else如何使用
【发布时间】:2020-05-07 17:36:24
【问题描述】:

有一个表格,上面有应用程序编号和用户数据。在表格的开头,末尾的申请号是一个绿色箭头。一个表中可以有无数个字段,而且它总是在变化。 我需要找到申请号旁边的绿色箭头并相应地点击它。

试图做类似的事情

String myorder = "629/0000/000000021059";


    if (myorder.equalsIgnoreCase(driver.findElement(By.xpath("/html/body/table/tbody/tr[1]/td[2]/div[2]/div/div[2]/div[2]/div/div/div/div/div[1]/table/tbody/tr/td[5]\n")).getText())){
        driver.findElement(By.xpath("/html/body/table/tbody/tr[1]/td[2]/div[2]/div/div[2]/div[2]/div/div/div/div[1]/div[1]/table/tbody/tr/td[18]/a/img\n")).click();

    }  if (myorder.equalsIgnoreCase(driver.findElement(By.xpath("/html/body/table/tbody/tr[1]/td[2]/div[2]/div/div[2]/div[2]/div/div/div/div[1]/div[2]/table/tbody/tr/td[5]\n")).getText())) {
        driver.findElement(By.xpath("/html/body/table/tbody/tr[1]/td[2]/div[2]/div/div[2]/div[2]/div/div/div/div[1]/div[2]/table/tbody/tr/td[18]/a/img\n")).click();

    } if (myorder.equalsIgnoreCase(driver.findElement(By.xpath("/html/body/table/tbody/tr[1]/td[2]/div[2]/div/div[2]/div[2]/div/div/div/div[1]/div[3]/table/tbody/tr/td[5]\n")).getText())) {
        driver.findElement(By.xpath("/html/body/table/tbody/tr[1]/td[2]/div[2]/div/div[2]/div[2]/div/div/div/div[1]/div[3]/table/tbody/tr/td[18]/a/img\n")).click();

等等最多100+ 第一个问题是我真的不喜欢写 if else 100 次的选项。并且在diva中只有一位数字是应用程序的id,而在diva中只有一位数字是绿色箭头不同的(img)

第二个问题是不管我怎么插入break;当找到正确的应用程序时,他点击了所需的箭头,但显然试图继续搜索页面后,但页面已经更改并且错误落下

(WARNING: The server did not provide any stacktrace information)

如果我使用上面附加的代码或只是元素的指示(在结果正确且页面已更改的那个之后)并附上我找不到它的注释,如果我使用 else if with break;

试图这样做

for (int i = 1; i < 25; i++) {
        String myorder = "629/6300/000000412067";

        if (myorder.equalsIgnoreCase(driver.findElement(By.xpath("/html/body/table/tbody/tr[1]/td[2]/div[2]/div/div[2]/div[2]/div/div/div/div[1]/div["+ i++ +"]/table/tbody/tr/td[5]\n")).getText())) {
            driver.findElement(By.xpath("/html/body/table/tbody/tr[1]/td[2]/div[2]/div/div[2]/div[2]/div/div/div/div[1]/div["+ i++ +"]/table/tbody/tr/td[18]/a/img\n")).click();
            break;
        }

但如果找到该项目,则它会点击表格中的第一个箭头,而不是与申请号在同一列中的箭头

非常感谢您的帮助!

【问题讨论】:

  • 我不太明白你在做什么,但在循环中你做了两次i++。因此,您应该将第二个 i++ 替换为 i 以与问题第一部分中的逻辑保持一致。

标签: java selenium xpath


【解决方案1】:

XPaths 是基于 1 而不是 0,因此您认为需要添加一个是正确的,但是,这两个不相等,因为 i++ 修改了 i 的值(即使像您拥有的那样内联),你在你的循环中做了两次。因此,循环i 的第二次迭代将是 3,而不是预期的 1。在您的循环中,将i++ 替换为i + 1,您应该一切顺利。

【讨论】:

    【解决方案2】:
    for (int i = 1; i < 25; i++) {
            String myorder = "629/3500/000000329976";
    
            if (myorder.equalsIgnoreCase(driver.findElement(By.xpath("/html/body/table/tbody/tr[1]/td[2]/div[2]/div/div[2]/div[2]/div/div/div/div[1]/div[" + i + 1 + "]/table/tbody/tr/td[5]\n")).getText())) {
                driver.findElement(By.xpath("/html/body/table/tbody/tr[1]/td[2]/div[2]/div/div[2]/div[2]/div/div/div/div[1]/div[" + i + 1 + "]/table/tbody/tr/td[18]/a/img\n")).click();
                break;
            }
        }
    
    
    Unable to locate element: {"method":"xpath","selector":"/html/body/table/tbody/tr[1]/td[2]/div[2]/div/div[2]/div[2]/div/div/div/div[1]/div[31]/table/tbody/tr/td[5]
    

    "}

    所以它一直在搜索直到 31。这很奇怪,因为我使用了 i

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-09
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多