Java &引用;无法定位元素“0”;从表中读取数据时出错,复制率为3/10
我编写了以下代码,用于从列中获取数据:Java &引用;无法定位元素“0”;从表中读取数据时出错,复制率为3/10,java,selenium,Java,Selenium,我编写了以下代码,用于从列中获取数据: String[] correct = new String[101]; String a = "//*[@id='mainData']/table/tbody/tr["; String b = "]/td[2]"; int[] comparison = new int[101]; for (int i = 1; i <= 100; i++) { String c
String[] correct = new String[101];
String a = "//*[@id='mainData']/table/tbody/tr[";
String b = "]/td[2]";
int[] comparison = new int[101];
for (int i = 1; i <= 100; i++) {
String c = a + i + b;
WebElement element = driver.findElement(By.xpath(c));
correct[i] = element.getText();
if (correct[i].equals("Order Request Import")) {
String[] orderButton = new String[101];
String e = "//*[@id='mainData']/table/tbody/tr[";
String f = "]/td[1]/div/button";
String g = e + i + f;
orderButton[i] = driver.findElement(By.xpath(g)).getText();
comparison[i]=Integer.parseInt(orderButton[i].substring(4));
}
}
String[]correct=新字符串[101];
字符串a=“//*[@id='mainData']/table/tbody/tr[”;
字符串b=“]”/td[2]”;
int[]比较=新int[101];
对于(inti=1;i当您要定位元素时,它可能不在DOM
上,这就是为什么您的测试有时会失败的原因
为了获得更好的方法,您应该在这里实现等待元素出现在DOM
上,然后执行以下操作:-
WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement element = wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath(c)));
当您要定位元素时,它可能不会出现在DOM
上,这就是为什么您的测试有时会失败的原因
为了获得更好的方法,您应该在这里实现等待元素出现在DOM
上,然后执行以下操作:-
WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement element = wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath(c)));
哦,这是第一行上面的一行:)它是这样的:newwebdriverwait(driver,10).until(ExpectedConditions.visibilityOfElementLocated(By.xpath(“/*[@id='mainData']]/div[1]/div/button”);字符串[]正确=新字符串[101]代码>。等等,上面发布的代码。那么,其他解决方案呢D@Tudor您还需要为此元素实现ExpectedConditions
。。为了更好地找到每个元素,您应该始终使用ExpectedConditions
。。)如果您正在等待一个元素,这并不意味着您也不会等待其他元素,您应该找到每个具有显式等待的元素:)您能给我一个关于如何找到具有预期条件的元素的上述代码的示例吗?因此基本上wait.until的行为类似于driver.findelement吗?比如,在上面的例子中,如果我写“element.click()”就行了吗?谢谢你!!哦,这是第一行上面的一行:)它是这样的:newwebdriverwait(driver,10).until(ExpectedConditions.visibilityOfElementLocated(By.xpath(“/*[@id='mainData']]/div[1]/div/button”);字符串[]正确=新字符串[101]代码>。等等,上面发布的代码。那么,其他解决方案呢D@Tudor您还需要为此元素实现ExpectedConditions
。。为了更好地找到每个元素,您应该始终使用ExpectedConditions
。。)如果您正在等待一个元素,这并不意味着您也不会等待其他元素,您应该找到每个具有显式等待的元素:)您能给我一个关于如何找到具有预期条件的元素的上述代码的示例吗?因此基本上wait.until的行为类似于driver.findelement吗?比如,在上面的例子中,如果我写“element.click()”就行了吗?谢谢你!!它是如何失败的?错误消息是什么?您可以共享链接或html源吗?为什么要从1而不是0开始循环?“正确”数组的第一个索引将不使用。您是否在显示代码后使用“正确”选项。如果没有,请使用变量。当您只放入一个字符串并在if条件后将其丢弃时,为大小100定义的“orderButton”数组有什么用途。使用一个变量。@在WebElement-element=driver.findelelement(By.xpath(c))行中断“找不到元素”错误消息代码>,刚刚说了above@Grasshopper数组在for循环中,迭代列中的所有结果…因此我需要数组来存储所有100个结果。如果我从0开始循环,则会出现“无法定位元素”错误10/10,我的页面上不存在div[0]/div[2]元素,表中的第一个元素是div[1]/div[2]。它是如何失败的?错误消息是什么?您可以共享链接或html源吗?为什么要从1而不是0开始循环?“正确”数组的第一个索引将不使用。您是否在显示代码后使用“正确”选项。如果没有,请使用变量。当您只放入一个字符串并在if条件后将其丢弃时,为大小100定义的“orderButton”数组有什么用途。使用一个变量。@在WebElement-element=driver.findelelement(By.xpath(c))行中断“找不到元素”错误消息代码>,刚刚说了above@Grasshopper数组在for循环中,迭代列中的所有结果…因此我需要数组来存储所有100个结果。如果我从0开始循环,将出现“无法定位元素”错误10/10,div[0]/div[2]元素在我的页面上不存在,表中的第一个元素是div[1]/div[2]。