org.openqa.selenium.NoSuchElementException:没有这样的元素:无法定位元素:{“method”:“xpath”,“selector”:“// * [@ id ='eError']”}

时间:2017-03-30 17:09:07

标签: selenium selenium-webdriver

我正在尝试使用所有有效和无效的输入来验证登录部分。

这是我尝试过的代码:


    public void login_Valid_Invalid_Combinations() throws BiffException, IOException, InterruptedException 
    {
      String FilePath = "D://credentials.xls";
      FileInputStream FIS = new FileInputStream(FilePath);
      Workbook WB = Workbook.getWorkbook(FIS);
      Sheet SH = WB.getSheet(0);
      for(int row =0; row<= SH.getRows()-1; row++)
      {
          String userNAME = SH.getCell(0, row).getContents();
          String passWORD = SH.getCell(1, row).getContents();
          System.out.println("USERMANE : "+userNAME + "  PASSWORD : "+passWORD);
          driver.get("LOGIN PAGE URL");
          driver.findElement(By.id("Email")).sendKeys(userNAME);
          driver.findElement(By.id("Password")).sendKeys(passWORD);
          driver.findElement(By.id("btnlogin")).click();
          System.out.println(driver.findElement(By.xpath("//*[@id='eError']")).getText());
          Thread.sleep(2000);
          String URL = driver.getCurrentUrl();
          System.out.println(URL);
          if (URL.equals("URL AFTER SUCCESFULL LOGIN")) 
          {
              System.out.println("Login Successfull");
          }
          else 
          {
              System.out.println("Login Failed");
          }
      }
      driver.close();
    }

我想在每次登录失败时显示错误消息,这样可以正常工作。但是当登录成功并且输入有效时,它会显示:

“org.openqa.selenium.NoSuchElementException:没有这样的元素:无法找到元素:{”method“:”xpath“,”selector“:”// * [@ id ='eError']“}”< / p>

因为没有成功登录的错误消息。

你能帮我解决一下这个问题。

3 个答案:

答案 0 :(得分:3)

对于这种情况,我不是try / catch的粉丝。您想要检查页面上是否存在元素,是否打印出包含的文本,否则成功登录,

 sudo ./name_of_file.bin

答案 1 :(得分:2)

您可以替换

System.out.println(driver.findElement(By.xpath("//*[@id='eError']")).getText());

用这个:

try {
    WebElement elem = driver.findElement(By.xpath("//*[@id='eError']"));
    System.out.println(elem.getText());
}
catch(Exception e) {
    // do nothing
}

try块中的上述代码找到带有xpath的元素。如果它存在,则继续下一行以打印文本。如果该元素不存在,则抛出异常并将其隐藏在catch块中并安全继续。

答案 2 :(得分:0)

如果成功,您将不会收到错误消息,在这种情况下,行下面会抛出NoSuchElement异常

System.out.println(driver.findElement(By.xpath("//*[@id='eError']")).getText());

我们需要将上面的代码放在try块中然后它将处理异常。下面是更新的代码。

String userNAME = SH.getCell(0, row).getContents();
String passWORD = SH.getCell(1, row).getContents();
System.out.println("USERMANE : "+userNAME + "  PASSWORD : "+passWORD);
driver.get("LOGIN PAGE URL");
driver.findElement(By.id("Email")).sendKeys(userNAME);
driver.findElement(By.id("Password")).sendKeys(passWORD);
driver.findElement(By.id("btnlogin")).click();
Thread.sleep(2000);
String URL = driver.getCurrentUrl();
if (URL.equals("URL AFTER SUCCESFULL LOGIN")) 
  {
    System.out.println("Login Successfull");
  }
else 
  {
   System.out.println("Login Failed");
try{
   System.out.println(driver.findElement(By.xpath("//*[@id='eError']")).getText());
   }
catch(Exception e){
    }       
    }

请告诉我它是否对您有所帮助。