Java 含WebElements的Selenium Webdriver列表
您好,我必须从页面中保存与页面中相同的Java 含WebElements的Selenium Webdriver列表,java,selenium,Java,Selenium,您好,我必须从页面中保存与页面中相同的,并已获取为class=my\u img我将此元素保存在列表中,在我尝试进入列表的第一个元素后,返回后获取第二个元素,但selenium给我此错误 线程“main”中出现异常 org.openqa.selenium.StaleElementReferenceException:未找到元素 在缓存中-可能页面在查找后已更改 这是我的密码 List <WebElement> Element = drivers.findElements(By.
,并已获取为class=my\u img
我将此元素保存在列表中,在我尝试进入列表的第一个元素后,返回后获取第二个元素,但selenium给我此错误
线程“main”中出现异常
org.openqa.selenium.StaleElementReferenceException:未找到元素
在缓存中-可能页面在查找后已更改
这是我的密码
List <WebElement> Element = drivers.findElements(By.cssSelector(".my_img"));
System.out.println("Megethos"+Element.size());
System.out.println("Pame stous epomenous \n");
for (i = 1; i < Element.size(); i++) {
drivers.manage().timeouts().implicitlyWait(35, TimeUnit.SECONDS);
System.out.println(i+" "+Element.size());
System.out.println(i+" "+Element.get(i));
action.click(Element.get(i)).perform();
Thread.sleep(2000);
System.out.println("go back");
drivers.navigate().back();
Thread.sleep(6000);
drivers.navigate().refresh();
Thread.sleep(6000);
}
List元素=drivers.findElements(By.cssSelector(“.my_img”);
System.out.println(“megetos”+Element.size());
System.out.println(“Pame-stous-epomenous\n”);
对于(i=1;i
您的操作。单击()和/或导航()调用将导致页面重新加载,从而导致列表中的WebElement不再有效。将findElements()调用放入循环中:
List <WebElement> Element = drivers.findElements(By.cssSelector(".my_img"));
for (i = 1; i < Element.size(); i++) {
Element = drivers.findElements(By.cssSelector(".my_img"));
drivers.manage().timeouts().implicitlyWait(35, TimeUnit.SECONDS);
System.out.println(i+" "+Element.size());
System.out.println(i+" "+Element.get(i));
action.click(Element.get(i)).perform();
Thread.sleep(2000);
System.out.println("go back");
drivers.navigate().back();
Thread.sleep(6000);
drivers.navigate().refresh();
Thread.sleep(6000);
}
List元素=drivers.findElements(By.cssSelector(“.my_img”);
对于(i=1;i
您的操作。单击()和/或导航()调用将导致页面重新加载,从而导致列表中的WebElement不再有效。将findElements()调用放入循环中:
List <WebElement> Element = drivers.findElements(By.cssSelector(".my_img"));
for (i = 1; i < Element.size(); i++) {
Element = drivers.findElements(By.cssSelector(".my_img"));
drivers.manage().timeouts().implicitlyWait(35, TimeUnit.SECONDS);
System.out.println(i+" "+Element.size());
System.out.println(i+" "+Element.get(i));
action.click(Element.get(i)).perform();
Thread.sleep(2000);
System.out.println("go back");
drivers.navigate().back();
Thread.sleep(6000);
drivers.navigate().refresh();
Thread.sleep(6000);
}
List元素=drivers.findElements(By.cssSelector(“.my_img”);
对于(i=1;i
您的操作。单击()和/或导航()调用将导致页面重新加载,从而导致列表中的WebElement不再有效。将findElements()调用放入循环中:
List <WebElement> Element = drivers.findElements(By.cssSelector(".my_img"));
for (i = 1; i < Element.size(); i++) {
Element = drivers.findElements(By.cssSelector(".my_img"));
drivers.manage().timeouts().implicitlyWait(35, TimeUnit.SECONDS);
System.out.println(i+" "+Element.size());
System.out.println(i+" "+Element.get(i));
action.click(Element.get(i)).perform();
Thread.sleep(2000);
System.out.println("go back");
drivers.navigate().back();
Thread.sleep(6000);
drivers.navigate().refresh();
Thread.sleep(6000);
}
List元素=drivers.findElements(By.cssSelector(“.my_img”);
对于(i=1;i
您的操作。单击()和/或导航()调用将导致页面重新加载,从而导致列表中的WebElement不再有效。将findElements()调用放入循环中:
List <WebElement> Element = drivers.findElements(By.cssSelector(".my_img"));
for (i = 1; i < Element.size(); i++) {
Element = drivers.findElements(By.cssSelector(".my_img"));
drivers.manage().timeouts().implicitlyWait(35, TimeUnit.SECONDS);
System.out.println(i+" "+Element.size());
System.out.println(i+" "+Element.get(i));
action.click(Element.get(i)).perform();
Thread.sleep(2000);
System.out.println("go back");
drivers.navigate().back();
Thread.sleep(6000);
drivers.navigate().refresh();
Thread.sleep(6000);
}
List元素=drivers.findElements(By.cssSelector(“.my_img”);
对于(i=1;i
如果主要目的是单击链接并返回上一页,则最好获取页面中所有“a”元素的“href”属性并导航到每个元素。当您导航回原始DOM更改时,您所遵循的方式将始终导致StaleElementReferenceExeception
下面是我建议的方法:
List<WebElement> linkElements = driver.findElements(By.xpath("//a[@class='my_img']"));
System.out.println("The number of links under URL is: "+linkElements.size());
//Getting all the 'href' attributes from the 'a' tag and putting into the String array linkhrefs
String[] linkhrefs = new String[linkElements.size()];
int j = 0;
for (WebElement e : linkElements) {
linkhrefs[j] = e.getAttribute("href");
j++;
}
// test each link
int k=0;
for (String t : linkhrefs) {
try{
if (t != null && !t.isEmpty()) {
System.out.println("Navigating to link number "+(++k)+": '"+t+"'");
driver.navigate().to(t);
String title;
title = driver.getTitle();
System.out.println("title is: "+title);
//Some known errors, if and when, found in the navigated to page.
if((title.contains("You are not authorized to view this page"))||(title.contains("Page not found"))
||(title.contains("503 Service Unavailable"))
||(title.contains("Problem loading page")))
{
System.err.println(t + " the link is not working because title is: "+title);
} else {
System.out.println("\"" + t + "\"" + " is working.");
}
}else{
System.err.println("Link's href is null.");
}
}catch(Throwable e){
System.err.println("Error came while navigating to link: "+t+". Error message: "+e.getMessage());
}
System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
}
List linkElements=driver.findElements(By.xpath(//a[@class='my\u img']);
System.out.println(“URL下的链接数为:“+linkElements.size()”);
//从'a'标记获取所有'href'属性,并将其放入字符串数组linkhrefs
String[]linkhrefs=新字符串[linkElements.size()];
int j=0;
for(WebElement e:linkElements){
linkhrefs[j]=e.getAttribute(“href”);
j++;
}
//测试每个链接
int k=0;
for(字符串t:linkhrefs){
试一试{
如果(t!=null&&!t.isEmpty()){
System.out.println(“导航到链接号“+(++k)+”:“+t+””;
driver.navigate()到(t);
字符串标题;
title=driver.getTitle();
System.out.println(“标题为:“+title”);
//在“导航到”页面中发现一些已知错误(如果有)。
如果((title.contains(“您无权查看此页面”))|(title.contains(“未找到页面”))
||(标题包含(“503服务不可用”))
||(标题.包含(“问题加载页”))
{
System.err.println(t+“链接不工作,因为标题为:”+title);
}否则{
System.out.println(“\”“+t+”\”“+”正在工作。”);
}
}否则{
System.err.println(“链接的href为null”);
}
}捕获(可丢弃的e){
System.err.println(“Erro