2015-12-16 64 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