2016-11-08 67 views
0

示例代码访问元素:获取java.lang.ClassCastException试图在列表

public class A 
{ 
    List<WebElement> itemList = new ArrayList<WebElement>(); 
    public List<WebElement> getItemsList() 
    { 
     itemList = (driver.findElements(By.xpath("<some valid xpath>"))); 
     return(itemList); 
    } 
} 

public class B 
{ 
    A hp = new A(); 
    public void subscribe() 
    { 
     hp.getItemsList().get(0).click(); 
    } 
} 

我创建的类A和类BI在页面上webelements列表我试图点击在第一个元素上。

在执行时我得到以下异常:

> java.lang.ClassCastException: java.lang.StackOverflowError cannot be cast to java.lang.Exception 

问题必须做一些事情与findElements,因为当我在代码中手动添加使用findElement方法的元素列表,代码工作正常。

在下面的例子中,我已经评论了findElements行,而是手动添加了这些元素,这段代码工作正常。

public class A 
{ 
    List<WebElement> itemList = new ArrayList<WebElement>(); 

    public List<WebElement> getItemsList() 
    { 
     //itemList = (driver.findElements(By.xpath(".//*[@id='hc6|stocks|item1']/span[2]""))); 
     itemList.add(driver.findElement(By.xpath(".//*[@id='hc6|stocks|item1']/span[2]"))); 
     itemList.add(driver.findElement(By.xpath(".//*[@id='hc6|stocks|item2']/span[2]"))); 
     itemList.add(driver.findElement(By.xpath(".//*[@id='hc6|stocks|item3']/span[2]"))); 
     return(itemList); 
    } 
} 

任何人都可以建议什么是错的?

+0

错误与您列出的代码无关,WebElement代码在哪里,因为它可能存在某种形式的异常转换失败,异常是已检查的异常,而堆栈溢出是运行时异常 –

+1

你准确得到这个异常的哪一行?你的代码中是否有递归,无论是有意的还是其他的发生?当你将A类中的方法嵌入到B类中时,你会得到相同的结果吗? – Grasshopper

+0

当我使用driver.findElement时,代替driver.findElements,代码对于相同的xpath正常工作。但是使用driver.findElement不是我的解决方案,因为页面上有很多这样的元素,我必须单击每个元素。以下是我尝试自动化的网站。 https://demos.lightstreamer.com/AuthDemo/我使用user1/wow登录并尝试单击列表中的每个项目来订阅 –

回答

0

问题不在代码中。问题在于框架。

在框架工作中,我们有一个驱动程序类,其中findElements方法未正确实现,其中findElement方法正确实施。因此,问题出现在driver.findElements方法和driver.findElement方法工作正常。

谢谢大家的帮助!

0

我试过XPATH如下:

List<WebElement> itemList = driver.findElements(By.xpath(".//*[@class='itemrow button']/span[2]")); // .//*[@class='itemrow button']/span[2] 
    System.out.println("list " + itemList); 

返回以下元素:

list [[[ChromeDriver: chrome on XP (a92615f2a2338af92c3dc57ff2366bf8)] -> xpath: .//*[@class='itemrow button']/span[2]], [[ChromeDriver: chrome on XP (a92615f2a2338af92c3dc57ff2366bf8)] -> xpath: .//*[@class='itemrow button']/span[2]], [[ChromeDriver: chrome on XP (a92615f2a2338af92c3dc57ff2366bf8)] -> xpath: .//*[@class='itemrow button']/span[2]], [[ChromeDriver: chrome on XP (a92615f2a2338af92c3dc57ff2366bf8)] -> xpath: .//*[@class='itemrow button']/span[2]], [[ChromeDriver: chrome on XP (a92615f2a2338af92c3dc57ff2366bf8)] -> xpath: .//*[@class='itemrow button']/span[2]], [[ChromeDriver: chrome on XP (a92615f2a2338af92c3dc57ff2366bf8)] -> xpath: .//*[@class='itemrow button']/span[2]], [[ChromeDriver: chrome on XP (a92615f2a2338af92c3dc57ff2366bf8)] -> xpath: .//*[@class='itemrow button']/span[2]], [[ChromeDriver: chrome on XP (a92615f2a2338af92c3dc57ff2366bf8)] -> xpath: .//*[@class='itemrow button']/span[2]], [[ChromeDriver: chrome on XP (a92615f2a2338af92c3dc57ff2366bf8)] -> xpath: .//*[@class='itemrow button']/span[2]], [[ChromeDriver: chrome on XP (a92615f2a2338af92c3dc57ff2366bf8)] -> xpath: .//*[@class='itemrow button']/span[2]], [[ChromeDriver: chrome on XP (a92615f2a2338af92c3dc57ff2366bf8)] -> xpath: .//*[@class='itemrow button']/span[2]], [[ChromeDriver: chrome on XP (a92615f2a2338af92c3dc57ff2366bf8)] -> xpath: .//*[@class='itemrow button']/span[2]], [[ChromeDriver: chrome on XP (a92615f2a2338af92c3dc57ff2366bf8)] -> xpath: .//*[@class='itemrow button']/span[2]], [[ChromeDriver: chrome on XP (a92615f2a2338af92c3dc57ff2366bf8)] -> xpath: .//*[@class='itemrow button']/span[2]], [[ChromeDriver: chrome on XP (a92615f2a2338af92c3dc57ff2366bf8)] -> xpath: .//*[@class='itemrow button']/span[2]], [[ChromeDriver: chrome on XP (a92615f2a2338af92c3dc57ff2366bf8)] -> xpath: .//*[@class='itemrow button']/span[2]], [[ChromeDriver: chrome on XP (a92615f2a2338af92c3dc57ff2366bf8)] -> xpath: .//*[@class='itemrow button']/span[2]], [[ChromeDriver: chrome on XP (a92615f2a2338af92c3dc57ff2366bf8)] -> xpath: .//*[@class='itemrow button']/span[2]], [[ChromeDriver: chrome on XP (a92615f2a2338af92c3dc57ff2366bf8)] -> xpath: .//*[@class='itemrow button']/span[2]], [[ChromeDriver: chrome on XP (a92615f2a2338af92c3dc57ff2366bf8)] -> xpath: .//*[@class='itemrow button']/span[2]], [[ChromeDriver: chrome on XP (a92615f2a2338af92c3dc57ff2366bf8)] -> xpath: .//*[@class='itemrow button']/span[2]], [[ChromeDriver: chrome on XP (a92615f2a2338af92c3dc57ff2366bf8)] -> xpath: .//*[@class='itemrow button']/span[2]], [[ChromeDriver: chrome on XP (a92615f2a2338af92c3dc57ff2366bf8)] -> xpath: .//*[@class='itemrow button']/span[2]], [[ChromeDriver: chrome on XP (a92615f2a2338af92c3dc57ff2366bf8)] -> xpath: .//*[@class='itemrow button']/span[2]], [[ChromeDriver: chrome on XP (a92615f2a2338af92c3dc57ff2366bf8)] -> xpath: .//*[@class='itemrow button']/span[2]], [[ChromeDriver: chrome on XP (a92615f2a2338af92c3dc57ff2366bf8)] -> xpath: .//*[@class='itemrow button']/span[2]], [[ChromeDriver: chrome on XP (a92615f2a2338af92c3dc57ff2366bf8)] -> xpath: .//*[@class='itemrow button']/span[2]], [[ChromeDriver: chrome on XP (a92615f2a2338af92c3dc57ff2366bf8)] -> xpath: .//*[@class='itemrow button']/span[2]], [[ChromeDriver: chrome on XP (a92615f2a2338af92c3dc57ff2366bf8)] -> xpath: .//*[@class='itemrow button']/span[2]], [[ChromeDriver: chrome on XP (a92615f2a2338af92c3dc57ff2366bf8)] -> xpath: .//*[@class='itemrow button']/span[2]], [[ChromeDriver: chrome on XP (a92615f2a2338af92c3dc57ff2366bf8)] -> xpath: .//*[@class='itemrow button']/span[2]]] 

我希望这不是什么问题与XPath或findElements方法。你使用任何框架来编写测试吗?

在行:

//itemList = (driver.findElements(By.xpath(".//*[@id='hc6|stocks|item1']/span[2]""))); 

观察到存在于的xpath span[2]""的末尾附加的双引号。检查它是否是错误的原因。

发生递归调用时发生java.lang.StackOverflowError。请查看您的代码是否发生递归。

java.lang.ClassCastException:java.lang.StackOverflowError的不能 投地java.lang.Exception的

在catch块,您使用Exception,但代码抛出的StackOverflowError这是一个错误(但不是例外)

彻底查看代码以找出递归发生的位置。

+0

检查双引号。这可能会导致问题 –

+0

我试着用给定的“.//*[@id='hc6|stocks|item1']/span[2]”使用findElements。它匹配只有一个元素,并没有抛出任何错误 –

+0

额外的双引号是粘贴代码时的错字,即使删除引用 –