【问题标题】:Selenium only executes if != null part of loop, and does not run the "else if null " part of the loopSelenium 仅执行 if != null 部分循环,并且不运行“else if null”部分循环
【发布时间】:2019-09-21 19:22:08
【问题描述】:

我有一个 if-else 语句,其中:

条件 1:ID 匹配且某些字段会自动填充。然后 if 语句只填充其余的字段

条件 2:ID 不匹配,所有字段为空。 ELSE 语句将它们全部填满

当我使条件 1 为真时,代码运行 If 语句并正常工作。 当我使条件 2 为真时,代码再次运行 If 语句应该执行的操作,而不是 else 语句

我正在使用 Selenium Java 进行自动化。

我尝试为每个字段对象放置单独的 if-else 语句,我尝试在 if != null 和 if !field.equals(null) 之间交替使用。我也尝试过 field.gettext(),将其分配给一个变量并检查 variable.length != 0。

if (driver.findElement(By.name("city")) != null) {

    object.setField6;
    object.setField7;
    object.setField8;
    object.setField9;

} else {

    object.setField2;
    object.setField3;
    object.setField4;
    object.setField5;
    object.setField6;
    object.setField7;
    object.setField8;
    object.setField9;
}

我为我的 if 语句选择了一个随机地址字段。

if (cityField != null) {

     Only fill the three remaining fields

} else {

     Fill all 8 fields (i.e. including address fields)

}

当我运行它并输入一个有效的 ID 号时,if 语句可以正常工作。但是当我输入一个无效的 id 时,“cityField”为空,if 语句执行而不是“else”语句,并且只填充 3 个字段而不是全部 8 个。

这就是我在每个字段的对象方法中所做的一切:

method() {
  city.click();
  city.sendKeys(cityName); 
}

【问题讨论】:

  • 我会假设页面有元素,元素的值没有被 driver.findElement(By.name("city")) 检查 - 只是它存在。
  • only populates 3 fields 你的意思是说只有 3 个字段填满了值吗?检查这个>driver.findElement(By.name("city")) 1=null的目的是什么?此检查是否意味着您只看到 3 个字段?问题不够清楚
  • @Dev 不,我在这两种情况下都看到了所有 9 个字段。唯一的区别是当 ID 有效时,会自动填充 4 个地址字段(所以我不想碰它)。出于这个原因,我只填充剩余的字段(与用户相关的),而单独留下地址字段。对于ELSE语句,ID无效,所以我要填充所有字段,包括地址字段
  • driver.findElement 返回一个 WebElement。您确定要验证字段/WebElement 的值而不是元素本身吗? (例如 WebElement 元素 = driver.findElement(...);字符串值 = element.getText())。可能您想检查该值是 null 还是空,而不是 WebElement。
  • @ApostolosEmmanouilidis 感谢您的建议!不知道为什么我从来没有想到要打印到控制台并检查。想通了这个问题。 GetText 没有获取自动填充的值。但是 getAttribute("value") 成功了。代码正在运行!

标签: java selenium if-statement selenium-webdriver selenium-chromedriver


【解决方案1】:
 if (driver.findElements(By.name("city")).size() > 0) {

                object.setField6;
                object.setField7;
                object.setField8;
                object.setField9;

            } else {

                object.setField2;
                object.setField3;
                object.setField4;
                object.setField5;
                object.setField6;
                object.setField7;
                object.setField8;
                object.setField9;
            }

或者,你可以这样做

         try   {
                driver.findElement(By.name("city"));
                object.setField6;
                object.setField7;
                object.setField8;
                object.setField9;

               } catch(WebDriverException wde)
            {
                object.setField2;
                object.setField3;
                object.setField4;
                object.setField5;
                object.setField6;
                object.setField7;
                object.setField8;
                object.setField9;
            }

【讨论】:

    猜你喜欢
    • 2023-01-10
    • 2022-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多