2013-05-19 85 views
2

我想打開網頁上的鏈接。該鏈接似乎位於標籤中的無序列表中。網頁的網址是selftechy dot com。這些標籤在家中,大約是硒。使用Java的WebDriver - 單擊以使用xpath打開鏈接

我試圖用driver.findElement(By.linkText("Selenium"));打開鏈接,但頁面似乎失去了它的樣式。我也嘗試過使用xpath方法,但它也不起作用。請向我解釋爲什麼它不起作用,我應該如何修改代碼以使其正常工作。謝謝你的幫助。

HTML代碼片段:

<body class="custom"> 
<div id="container"> 
<div id="page"> 
<ul class="menu"> 
<li class="tab tab-home current"><a href="http://selftechy.com">Home</a></li> 
<li class="tab tab-1"><a href="http://selftechy.com/about" title="About">About</a></li> 
<li class="tab tab-2"><a href="http://selftechy.com/selenium-2" title="Selenium">Selenium</a></li> 
</ul> 

webdriver的代碼來打開

import java.util.List; 
import java.util.concurrent.TimeUnit; 
import org.junit.*; 

import org.junit.Before; 
import org.junit.After; 
import org.openqa.selenium.*; 
import org.openqa.selenium.firefox.FirefoxDriver; 
import org.openqa.selenium.support.ui.Select; 

public class selftechyTestng 
{ 
    private WebDriver driver; 
    private String baseUrl; 

    @Before 
    public void setUp() throws Exception 
    { 
     driver = new FirefoxDriver(); 
     baseUrl = "http://selftechy.com/"; 
     driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 
    } 
    @Test 
    public void searchElements() throws Exception{ 
     driver.get(baseUrl); 

      //use By.linkText method the page lost its styling 
      driver.findElement(By.linkText("Selenium")); 

     //use xpath method to open the link doesn't work either 
     List<WebElement> elements = driver.findElements(By.xpath("//div[@id=page]/*[3]")).click(); 
     driver.findElement(By.xpath("//div[@id=page]/*[3]")).click(); 
    } 

} 
+0

您的xpaths可能有問題。在嘗試調試您的webdriver腳本之前,請嘗試使用[firepath](https://addons.mozilla.org/en-US/firefox/addon/firepath/)確認您的xpath確實可以識別您的屏幕元素。 –

回答

6

你爲什麼搜索格,然後將子元素的鏈接 - 是否有什麼特別的原因?我沒有看到任何優勢,當然你沒有得到你真正想要點擊的a元素。在我看來,這是非常簡單的使用

driver.findElement(By.xpath("//a[@title = 'Selenium']")).click(); 

使用你的方法,你必須使用

driver.findElement(By.xpath("//div[@id = 'page']/ul/li[3]/a")).click(); 
+0

感謝您的回覆。你的兩個解決方案都有效。我看到** @ **用於選擇HTML標籤中的屬性。 – user2061466

+0

@dirkk:如果標題不可用作html中的屬性,您將如何識別相同的內容。 –

+0

@KrishnaChandraTiwari如果你有一個新的問題,請詢問一個實際的新問題。在評論中這裏很難解決它,因爲它完全取決於你的HTML是怎麼樣的 - 你可能沒有title屬性,但你肯定有_something_ else來標識元素。 – dirkk

0

您也可以使用此XPath:

"//a[text()='Selenium']" 

這將找到的鏈接text =硒

0

下面的代碼將打開新窗口中的鏈接,並打印標題和網絡的ne wly打開窗戶。

String defaultwindow = ""; 
@Test(description="Main Page") 
public void UserOnMainPage() 
{ 
     driver.get("http://yoururl.com"); 
     defaultwindow = driver.getWindowHandle(); 
     String selectAll = Keys.chord(Keys.SHIFT,Keys.RETURN); 
     driver.findElement(By.linkText("linkname")).sendKeys(selectAll); 
     printTitleandUrlofNewlyOpenedwindow(); 
} 

private void printTitleandUrlofNewlyOpenedwindow() 
{ 
     Set<String> windowHandles1 = driver.getWindowHandles(); 
     int size = windowHandles1.size(); 
     System.out.println(size); 
     for (String string : windowHandles1) 
     { 
      driver.switchTo().window(string); 

      if(string.equals(defaultwindow)) 
      { 
       System.out.println("On Main Window"); 
       Reporter.log("On Main Window"); 
      } 
      else 
      { 
       String title=driver.getTitle(); 
       System.out.println(title); 
       Reporter.log(title); 
       String recipeUrl = driver.getCurrentUrl(); 
       System.out.println(recipeUrl);  
       Reporter.log(recipeUrl); 

      } 
     } 
     driver.switchTo().window(defaultwindow); 
} 
0

下面的代碼將打開新標籤中的鏈接。

String selectLinkOpeninNewTab = Keys.chord(Keys.CONTROL,Keys.RETURN); driver.findElement(By.linkText(「urlLink」))。sendKeys(selectLinkOpeninNewTab);

相關問題