Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 含WebElements的Selenium Webdriver列表_Java_Selenium - Fatal编程技术网

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