Java if块中的Or条件仅检查第一个stmt,而不检查第二个stmt

Java if块中的Or条件仅检查第一个stmt,而不检查第二个stmt,java,selenium,Java,Selenium,我正在尝试登录,输入用户名和pwd,并在未显示“同意元素”或显示“管理标题元素”时写入条件,然后单击管理元素,但我的代码只是检查未显示“同意元素”,并引发异常 driver.get("entering url"); driver.manage().window().maximize(); driver.findElement(By.id("BodyContent_MainContent_MainContentPlaceHolder_UserName")).sendKeys(" en

我正在尝试登录,输入用户名和pwd,并在未显示“同意元素”或显示“管理标题元素”时写入条件,然后单击管理元素,但我的代码只是检查未显示“同意元素”,并引发异常

driver.get("entering url");
driver.manage().window().maximize();
       driver.findElement(By.id("BodyContent_MainContent_MainContentPlaceHolder_UserName")).sendKeys(" entering username");
       driver.findElement(By.id("BodyContent_MainContent_MainContentPlaceHolder_Password")).sendKeys("sending pwd");
       driver.findElement(By.id("BodyContent_MainContent_MainContentPlaceHolder_LoginButton")).click();
       if( !driver.findElement(By.xpath("//input[@value='I Agree']")).isDisplayed() || driver.findElement(By.id("admin_header")).isDisplayed()  );
          driver.findElement(By.id("admin_header")).click();
    }

使用
findElements
而不是
findElement
,并检查返回集合的
size()
,以检查是否存在“我同意”元素。

您的代码是否抛出
NoTouchElementException
如果是:为什么不在问题中包含该元素?是的,它抛出了NosuchelementException这个问题,正如目前提出的,似乎与实际问题无关。@snehajambula您能进一步总结一下您的用例吗?如果agree元素或admin header元素
isDisplayed()
,您想做什么?如果agree元素或admin header元素未显示,您想做什么?@snehajambula您的用例是单击agree元素(如果
isDisplayed()
),或者单击admin header元素?我在回答中添加一点来澄清,使用
isDisplayed()检查元素的存在
在元素不存在时总是抛出
NoTouchElementException
。它可以通过在try块中使用来处理,但是检查定位器可用的所有元素的列表的大小更快,并且可以避免处理不必要的异常。