2013-08-19 61 views
0

我正在使用Selenium webdriver。 我必须从文件中读取链接的xpath并搜索链接是否存在于网页上,如果存在,请点击它。 这就是它!搜索网页上的链接,然后点击它使用硒

继承人的链接

link1 //a[contains(text(), 'Volunteer Registration')]/@href 
link2 //a[contains(text(), 'Sign Up')]/@href 
link3 //a[contains(text(), 'Register/sign Up')]/@href 

就像聪明我从那里我会读一个环节及其相关联的XPath,并基于该Xpath的一个文件,我会搜索该文件是否存在链路上网页或不是。我曾经为写

准则是:从文本文件

读取数据到哈希表 -

public HashMap<String, String> readDataFromFile(String fileName) { 
     try { 
      FileReader fr = new FileReader(fileName); 
      BufferedReader br = new BufferedReader(fr); 
      String strLine = null; 
      String[] prop = null; 
      while ((strLine = br.readLine()) != null) { 
       prop = strLine.split("\t"); 
       recruiters.put(prop[0], prop[1]); 
      } 
      br.close(); 
      fr.close(); 
     } catch (Exception exception) { 
      System.out.println("Unable to read data from recruiter file: " + exception.getMessage()); 
     } 
     return recruiters; 
    } 

方法返回基于关键

public String findValue(String Name){ 
    for (String s: HashTable.entrySet()) { 
     Map.Entry entry = (Map.Entry) s; 

     if(entry.getKey().equale(Name)) 
     { 
      String value= entry.getValue(); 
      return value; 
     } 
    } 
    return null; 
} 

从哈希表的XPath值现在我想写一个方法来搜索xpath相关链接是否存在于网页上或不是。

请帮我的..

的逻辑是一样的东西

public void Search&ClickLink() 
{ 
List<WebElement> links = driver.findElements(By.tagName("a")); 
System.out.println(links.size()); 
for (WebElement myElement : links){ 
String link = myElement.getText(); 
System.out.println(link); 
myElement.click(); 
driver.navigate().back(); 
} 

但我不知道这件事。 请让我知道,如果这个功能是approprite,如果该接近是正确的。 请提出更好的实现代码的方法。

谢谢!

回答

0

那么......最后一组代码有几个问题。

首先是你要得到StaleElementReferences。当你找到一个元素(或元素列表)时,它们指向一个页面的元素。如果刷新页面或离开并返回,它们将无效,并且您必须重新找到所有元素。

此外,很多时候链接不会导航到新页面。如果您的任何链接都是这种情况,您会突然发现自己点击错误页面上的链接(因为您已导航回)

最后,您实际上并没有在网页上做任何事情。对于你所知道的,链接可能会出现500错误,Selenium不知道。

不过,既然你都在一个文件中的链接,为什么不直接读取文件,将其存储在一个数组,然后做一个简单的for循环:

for (String linkName: allLinks){ 
    driver.get(urlWithLinks); 
    driver.findElement(By.linkText(linkName)).click(); 
    ...validate the page... 
} 

最后......我个人认为点击页面上的所有链接是一个糟糕的测试。一个更好的测试将是去链接,并在页面上做的东西。这样你实际上正在测试网站的功能。

+0

但问题是我该如何搜索基于其Xpath的链接?我是自动化新手,所以请你帮我写下最后一个功能。我明白了这一点,但从文件读取xpath和检查网页上的链接似乎有点困难 –

+0

XPath不应该被要求。 By.linkText()会找到这个元素。如果你绝对需要XPath,谷歌搜索会让你很好:http://stackoverflow.com/questions/915338/xpath-find-link-url-by-link-text –

相关问题