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