如何使用Selenium(Java)中的If-else条件使else块中的条件起作用

如何使用Selenium(Java)中的If-else条件使else块中的条件起作用,selenium,Selenium,如果if块中的条件不起作用,我尝试在else块中查找元素 try { if(Driver.driver.findElement(By.xpath("//div[@id='Tpay_success']")).isDisplayed()) { System.out.println("Payment is successful"); Reporter.log("Payment is successful");

如果if块中的条件不起作用,我尝试在else块中查找元素

  try
    {
       if(Driver.driver.findElement(By.xpath("//div[@id='Tpay_success']")).isDisplayed())
        {
            System.out.println("Payment is successful");
            Reporter.log("Payment is successful");
        }
        else
        {
            Thread.sleep(2000);
            {
            if(Driver.driver.findElement(By.id("pay_decline")).isEnabled()) 
             {
                System.out.println("pay declined");
                action.moveToElement(By.id("pay_decline")).isEnabled()).click().perform();
                Reporter.log("PAYMENT DECLINED!!");
              }

         }  
    catch(ExceptionInInitializerError ex)
    {
            System.out.println(ex);
    }
  }
我得到一个错误,说:

Unable to locate element: {"method":"xpath","selector":"//div[@id='Tpay_succes']"}
如果if块没有执行,我希望执行else块。 欢迎提出任何建议。谢谢

if(Driver.driver.findElement(By.xpath("//div[@id='Tpay_success']")).isDisplayed())
这不是你想象的那样<如果当前加载页面的DOM中不存在元素,则code>findElement()将抛出错误。这意味着在这种情况下不会调用
isDisplayed()

您可以使用
try…catch做您想做的事情:

  try
    {
       Driver.driver.findElement(By.xpath("//div[@id='Tpay_success']"))
       System.out.println("Payment is successful");
       Reporter.log("Payment is successful");
    } catch(ExceptionInInitializerError ex) {
            Thread.sleep(2000);
            if(Driver.driver.findElement(By.id("pay_decline")).isEnabled()) {
                System.out.println("pay declined");
                action.moveToElement(By.id("pay_decline")).isEnabled()).click().perform();
                Reporter.log("PAYMENT DECLINED!!");
            }
    }

请注意,您应该了解如何使selenium驱动程序等待特定元素,而不是使用
Thread.sleep()

您的问题是什么?考虑到格式/缩进(最终是问题的一部分,我们不知道),代码很难阅读。示例在
else
后面和
if
@KorayTugay前面用括号括起了同一行,我编辑了它“如果if块没有执行,我想执行else块。”这正是if…else的工作原理。仍然不正确,括号在第二个
if
的末尾,一般来说,结束与开始不匹配,也不是契约谢谢你的回复。我面临的另一个问题是,当它到达catch块时,已经太晚了,这意味着catch块中div id='Tpay_success'的submit按钮在到达时丢失了。我已经删除了Thread.sleep()方法。这种缩进和括号的使用真的用于selenium吗?有时在额外线路上打开/关闭,有时在同一线路上打开/关闭;期初与期末不符也不缩进???这太令人困惑了。在Selenium中缩进没有多大关系,但因为我使用Java,所以需要括号。在Java中也不重要,但它对于易于阅读/理解(几乎任何编程语言)来说都是必不可少的——我怀疑Selenium中不需要匹配开始括号和结束括号;e、 g.在
的末尾打开if
,在与
catch
相同的缩进级别上关闭(其本身未关闭)是的,Selenium不需要类似的东西,我已经纠正了。