2013-05-19 47 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);

相关问题