点击链接后我到达了一个页面。我还没有点击该页面上的任何内容。仍然,只要页面加载它就会抛出一个错误: 在缓存中找不到元素 - 自查询以来页面可能已更改
List<WebElement> securityGroup = driver.findElements(By.cssSelector("td[class='button-col']>a:nth-of-type(2)"));
System.out.println(securityGroup.size());
Thread.sleep(5000);
for(WebElement link:securityGroup) {
String b= link.getAttribute("href");
boolean a= b.contains(data0);
if(a){
System.out.println(b);
Thread.sleep(5000);
System.out.println("before clicking link");
link.click();
//After this new page opens and above error comes.**
}else {
System.out.println("No match found");
}
}
Thread.sleep(5000);
Select sel = new Select(driver.findElement(By.xpath("//select[@name='groupId']")));
System.out.println(sel.getOptions().toString());
sel.selectByValue("TEST");
答案 0 :(得分:1)
这是因为for循环。
您正在查找securityGroup
这是一个列表,您正在遍历列表。在此for
循环中,您将查找条件,如果是,则继续单击该链接。但这里的问题是列表迭代没有完成,for循环继续。但它不会找到下一次迭代的String b= link.getAttribute("href");
,因为你在新页面上。
一旦条件满足,使用break
来打破循环。
if(a){
System.out.println(b);
Thread.sleep(5000);
System.out.println("before clicking link");
link.click();
break;
}else {
System.out.println("No match found");
}
答案 1 :(得分:0)
没有足够的时间加载页面并获取元素:
driver.findElement(By.xpath("//select[@name='groupId']"))
在初始化驱动程序
后尝试执行ImplicitlyWaitdriver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
和Thread.sleep(5000);
使用selenium是个坏主意,等待selenium methods
答案 2 :(得分:0)
当您点击link
并重定向到另一个页面时,驱动程序会丢失securityGroup
。这就是引起异常的原因。
您需要重新定位每个securityGroup
List<WebElement> securityGroup = driver.findElements(By.cssSelector("td[class='button-col']>a:nth-of-type(2)"));
int size = securityGroup.size();
for (int i = 0 ; i < size ; ++i) {
securityGroup = driver.findElements(By.cssSelector("td[class='button-col']>a:nth-of-type(2)"));
WebElement link = securityGroup.get(i);
String b = link.getAttribute("href");
boolean a = b.contains(data0);
if(a) {
System.out.println(b);
Thread.sleep(5000);
System.out.println("before clicking link");
link.click();
}
else {
System.out.println("No match found");
}
}