Selenium、Java、if-else语句工作不正常、NoTouchElementException

Selenium、Java、if-else语句工作不正常、NoTouchElementException,java,selenium,for-loop,junit,automation,Java,Selenium,For Loop,Junit,Automation,我正在创建一个简单的selenium/junit测试,该测试旨在获取excel数据并将数据附加到URL字符串的末尾。我编写了一个for循环,它应该运行在特定工作表中的所有数据中。它应该在循环完成后关闭当前浏览器窗口,并在下一次迭代开始时启动另一个浏览器会话 前8个循环运行正常,但测试结束并抛出一个“NoTouchElementException”,引用第一个条件“if”中的元素 陈述假设第一个条件语句中的元素不存在,测试应该直接跳到下一个条件语句(elseif) import org.junit

我正在创建一个简单的selenium/junit测试,该测试旨在获取excel数据并将数据附加到URL字符串的末尾。我编写了一个for循环,它应该运行在特定工作表中的所有数据中。它应该在循环完成后关闭当前浏览器窗口,并在下一次迭代开始时启动另一个浏览器会话

前8个循环运行正常,但测试结束并抛出一个“NoTouchElementException”,引用第一个条件“if”中的元素 陈述假设第一个条件语句中的元素不存在,测试应该直接跳到下一个条件语句(elseif)

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;


import Utility.ExcelUtils;

public class TestClass extends Work{

    WebDriver driver;
    ExcelUtils excel;
    String[] dataArray;
    int dataArraySize;


@Before
public void testSetup() throws Exception { 

    System.setProperty("webdriver.chrome.driver", "C:\\Users\\jkohout\\Documents\\Drivers\\chromedriver1.exe");

    driver = new ChromeDriver();

    excel = new ExcelUtils();

    excel.setExcelFile("C:\\Users\\jkohout\\Documents\\JEMSAPITEST\\TestCases.xlsx", "Decoded");


    dataArray = new String[1039];

    dataArraySize = dataArray.length;
}

@Test
public void testDataRun() throws Exception {

        for(int i=0; i < 1040; i++ ) {

            String testCase1 = ExcelUtils.getCellData(i, 0); 

            driver.get(attUrlString+testCase1);

            Thread.sleep(2000);


            if(driver.findElement(By.xpath("//*[@id='javascriptEnabled']/div/div/img")).isDisplayed()) {

                System.out.println("404 page not found: Pass!: " + i);
                System.out.println(dataArraySize);




            } else if (driver.findElement(By.cssSelector("input[id='ct100_masterBody_btnNew']")).isDisplayed()) {

                System.out.println("Normal Display: Pass!: " + i);
                System.out.println(dataArraySize);



            } else {

                System.out.println("Fail: " + i);
                System.out.println(dataArraySize);
            }

        }



}

@After
public void closeTest() {

    driver.quit();
}

}
替换:

Thread.sleep(2000);
if(driver.findElement(By.xpath("//*[@id='javascriptEnabled']/div/div/img")).isDisplayed()) {
    System.out.println("404 page not found: Pass!: " + i);
    System.out.println(dataArraySize);
} else if (driver.findElement(By.cssSelector("input[id='ct100_masterBody_btnNew']")).isDisplayed()) {
与:

Thread.sleep(2000);
List List=driver.findElements(By.xpath(“/*[@id='javascriptEnabled']/div/div/img”);
if(!list.isEmpty()&&list.get(0.isDisplayed()){
System.out.println(“未找到404页:通过!:”+i);
System.out.println(dataArraySize);
}else if(driver.findelelement(由.cssSelector(“输入[id='ct100\u masterBody\u btnNew'])).isDisplayed()显示){

我们的想法不是查找单个元素,而是查找元素列表。如果找不到元素,我们将得到一个空列表,但在这种情况下不会引发异常。

只需替换以下代码行:

if(driver.findElement(By.xpath("//*[@id='javascriptEnabled']/div/div/img")).isDisplayed()) {
     System.out.println("404 page not found: Pass!: " + i);
     System.out.println(dataArraySize);
 }  

else if (driver.findElement(By.cssSelector("input[id='ct100_masterBody_btnNew']")).isDisplayed()) {
     System.out.println("Normal Display: Pass!: " + i);
     System.out.println(dataArraySize);  
}  
至:

int size1 = driver.findElements(By.xpath("//*[@id='javascriptEnabled']/div/div/img")).size();
   if(size1>0) {
             System.out.println("404 page not found: Pass!: " + i);
             System.out.println(dataArraySize);   
         }

int size2 =  driver.findElements(By.cssSelector("input[id='ct100_masterBody_btnNew']")).size();
   if(size2>0) {
            System.out.println("Normal Display: Pass!: " + i);
            System.out.println(dataArraySize);
            }  
说明:

只需将
findElement()
替换为
findElements()
将返回一个列表,然后如果列表的大小大于1,您可以在代码中继续执行。我必须说这是一个解决方法。因为如果没有元素存在,那么findElements()将等待您在隐式等待中指定的时间

希望这会有帮助

if(driver.findElement(By.xpath("//*[@id='javascriptEnabled']/div/div/img")).isDisplayed()) {
     System.out.println("404 page not found: Pass!: " + i);
     System.out.println(dataArraySize);
 }  

else if (driver.findElement(By.cssSelector("input[id='ct100_masterBody_btnNew']")).isDisplayed()) {
     System.out.println("Normal Display: Pass!: " + i);
     System.out.println(dataArraySize);  
}  
int size1 = driver.findElements(By.xpath("//*[@id='javascriptEnabled']/div/div/img")).size();
   if(size1>0) {
             System.out.println("404 page not found: Pass!: " + i);
             System.out.println(dataArraySize);   
         }

int size2 =  driver.findElements(By.cssSelector("input[id='ct100_masterBody_btnNew']")).size();
   if(size2>0) {
            System.out.println("Normal Display: Pass!: " + i);
            System.out.println(dataArraySize);
            }