2016-02-29 151 views
0

我有一个包含10个不同元素链接列表的页面,我使用了一个元素,转到页面指定它,实现需要执行的操作,然后返回到元素列表。使用Webdriver硒点击下一个列表元素 - Java

执行操作后,我需要返回到项目列表并单击下一个元素,而不是先前单击的元素。

如何点击列表中的下一个元素而不是已经点击过的LEMENT?

Obs。:我无权访问源代码。

页的基本结构:

<!DOCTYPE html> 
<html> 
<body> 

<h2>Page Test</h2> 

    <div id="results-container"><ol id="results" class="search-results"> 

    <li class="mod result idx0 people hover" data-li-entity-id="354494011" data-li-position="0"> </li> 

    </div> 

    </br> 


    <div id="results-container"><ol id="results" class="search-results"> 

     <li class="mod result idx0 people hover" data-li-entity-id="354494012" data-li-position="1"> </li> 

    </div> 
    </br> 

    <div id="results-container"><ol id="results" class="search-results"> 

     <li class="mod result idx0 people hover" data-li-entity-id="354494022" data-li-position="2"> </li> 

    </div> 

</body> 
</html> 

    java.util.List<WebElement> links = (List<WebElement>) driver.findElements(By.linkText("element"));   
    System.out.println(links.size()); 

Page

+0

为什么你不能只是开始循环,并通过它的索引调用每个元素? – Andersson

+0

因为每个人都改变页面。 –

+0

Sooooo ...?问题是什么?:)你为find_elements()获得的列表中的每个元素运行'for'循环,在第一个链接上单击,执行所有操作,然后在下一次迭代中为下一个元素做同样的操作等等...... – Andersson

回答

3
List<webElement> links= driver.findElements(By.className("search-results")); 
for(int i=0;i<links.size();i++){ 
links= driver.findElements(By.className("search-results")); // this step is must, because whenever you go to other page all store webelements in a list will washout 
links.get(i).click(); 
// do whatever the actions you need to perform 
driver.navigate().back(); 
+0

完美,谢谢。 –

0

如果您需要执行的操作是为你导航,你可以使用类似这样的页面是一样的:

List<WebElement> links = (List<WebElement>) driver.findElements(By.linkText("element"));   
for (WebElement link : links) { 
    link.click(); 
    doWhateverOtherActions(); 
    driver.navigate().back(); 
break(); 

}

如果每个pag上的动作e不同,您应该考虑将每个链接分别标识为WebElement,并为每个链接创建方法以单击该链接,对该页面执行特定操作并返回到初始页面。

+0

失败,要返回到页面,他们点击之前已经点击过的同一个链接。 –

相关问题