2015-12-16 65 views
0

当我去仪表板的bbc.com时,我们有新闻,体育,天气,商店,地球不同的链接,所以当代码运行时导航到第一个链接或屏幕做下一个元素的点击操作,然后停止我想点击所有链接,这些链接是新闻,体育,天气,商店。请帮助无法点击从网页提取的特定区域提取的所有链接

WebDriver driver = new FirefoxDriver(); 
@Test 
public void snapage() throws InterruptedException{ 
driver.get(" http://www.bbc.com/"); 
driver.manage().window().maximize(); 
driver.manage().timeouts().implicitlyWait(20,TimeUnit.SECONDS); 
WebElement J= driver.findElement(By.xpath(".//*[@id='orb-header']")); 
String one=".//*[@id='orb-nav-links']/ul/li["; 
String two="]/a"; 
Thread.sleep(2000); 
for(int i=1;i<=8;i++){ 
String text=driver.findElement(By.xpath(one+i+two)).getText(); 
System.out.println(text); 
driver.findElement(By.xpath(one+i+two)).click(); 
+0

你的代码有什么问题?你解释了你的要求,但不是你在代码中遇到的问题。请避免像'它不起作用'的解释,添加一些关于问题和您的尝试的技术细节。 – Paolo

+0

对不起,这是我的第一篇文章,新的它会确保从下次。问题是,当我运行代码它击中两个链接,然后停下来,它应该点击8个链接。 –

+0

没问题。请理解我们没有进行测试,因此您知道的所有内容都不为SO上的人所知:将所有相关详细信息添加到问题中。最好的办法是重现问题和链接来测试它(如果可能的话) – Paolo

回答

0

您可以在此处遵循的一种方法是,您可以提取所有一次显示的链接,然后一次导航到那些链接。您可以参考下面的代码片段:

public void clickBanners(){ 
     bannerLinks = new HashSet<String>(); 

      List<WebElement> banners = driver.findElements(By.xpath("<xPath_of_links>"));   

      for(WebElement banner : banners){ 
       bannerLinks.add(banner.getAttribute("href")); 
      } 

      for(String bannerLink : bannerLinks){ 
       driver.navigate().to(bannerLink); 
       } 
     } 

做让我们知道,如果这有助于你出去。

+0

感谢abhinav为你的建议,这种方法也适用,但我想知道如何解决我在我的代码中面临的问题:例外是:org.openqa.selenium.NoSuchElementException:无法locate元素:{“method”:“xpath”,“selector”:“.//*[@ id ='orb-nav-links']/ul/li [3]/a”} –

+0

我不确定但这可能是您正在动态构建xpath并尝试按照构建xpath查找元素的原因之一,但是它并不总是您所指定的元素存在于正在显示的页面上,因为横幅会一直移动,并且因此无法点击。你也可以做的是等待元素被显示和点击,然后执行操作。希望澄清一点。 – Abhinav