需要通过部分ID从HTML获取href

时间:2018-10-08 12:13:42

标签: java selenium selenium-webdriver katalon-studio getattribute

我需要一些帮助,以便在自动测试中从HTML获取href。 我的测试应该从id =“ product-page”的网站上获取特定的网址(我们可以在其中找到带有某些选项的产品)。我有一些应该可行的方法,但是没有。

HTML片段:

<section id="product-page">
<div class="container">
<div class="row">
<div class="col-12">
<ul class="breadcrumb">
<li><a href="/">Home</a></li>
<li><a href="/e-cigs-vaping-devices">E cigs vaping devices</a></li><li><a href="/e-cigs-vaping-devices/logic-pro-vaporizer">Logic pro vaporizer</a></li></ul></div></div></div>

方法:

public ArrayList<String> verifyProductSection(String divID) {
	
	KeywordUtil.logInfo("Get all Products links");
	String ModifiedString="";
	ModifiedString=divID.toLowerCase();
	
	WebDriver driver = DriverFactory.getWebDriver();
	
	List<String>ActualProductsLinks = new ArrayList<String>();
	WebElement element = driver.findElement(By.id("product-page"));
	List<WebElement> options =        element.findElements(By.tagName("a"));
	System.out.println(options.size());
	
	int ActualLinksSize = 0;
	
		for (WebElement we : options) {
		
		String strLinkName = we.getText();
		//println strLinkName.isEmpty();
			
		if (strLinkName == null || strLinkName.isEmpty()){
			}else{
	
			ActualProductsLinks.add(strLinkName);
			ActualLinksSize=ActualLinksSize+1;
			println (ActualLinksSize + " : Product Link Name : " + strLinkName);
			}
		}
				println ActualLinksSize;
}

3 个答案:

答案 0 :(得分:1)

尝试使用新的Torello网络抓取软件包。效果很好。 Selenium可以使您的网页点击自动化,但这可以快速获取服务器端针对Java的HTML-Vector:

  

http://developer.torello.directory/JavaHTML/index.html

以下是一些使用Java代码浏览HTML页面的示例代码。所有页面都可以被抓取/转换为Java Vector。 HTML保存到“ TagNode”,非HTML文本保存到“ TextNode”。

以下代码查找具有 id字段等于“ product-page”的第一段HTML。然后,它会打印出包装在 HTML A (锚点)标记中的每个 HREF URL ,并打印其URL。

import Torello.HTML.*;

import java.util.*;
import java.util.regex.*;

public class Find
{
    public static void main (String argv[]) throws java.io.IOException
    {
        Vector<HTMLNode> page = HTMLPage.getPageTokens(new java.net.URL("The URL"), false);
        int pos = InnerTagFind.first(page, "id", innerTag -> innerTag.equals("product-page"));
        Vector<TagNode> links = TagNodeGet.all(page, pos, -1, TC.OpeningTags, "a");
        for (TagNode tn : links)
        {
            System.out.println("Tag:\t" + tn.str);
            System.out.println("HREF:\t" + Tags.getInnerTagValue(tn, Tags.A_HREF));
        }
    }
}

答案 1 :(得分:0)

据我了解你的问题。您要提取上述部分中的所有链接。

使用下面的代码,让我知道是否有进一步的查询。

WebElement section  = driver.findElement(By.id("product-page"));

List<WebElement> links = section.findElement(By.cssSelector(".breadcrumb a"));

System.out.println("total links : " + links.size());

for(int i=0 ; i<links.size(); i++)
{
     System.out.println("Linktext : " + links.get(i).getText());
     System.out.println("Link href : " + links.get(i).getAttribute("href"));
}

答案 2 :(得分:0)

要获取 /e-cigs-vaping-devices/logic-pro-vaporizer href 属性,可以使用以下解决方案:

  • xpath

    System.out.println(driver.findElement(By.xpath("//section[@id='product-page']//ul[@class='breadcrumb']//a[contains(.,'Logic pro vaporizer')]")).getAttribute("href"));
    

更新

您可以创建一个自定义函数并在需要的地方调用它,如下所示:

  • 功能:

    public void print_href(String productName)
    {
        System.out.println(driver.findElement(By.xpath("//section[@id='product-page']//ul[@class='breadcrumb']//a[contains(.='" + productName + "')]")).getAttribute("href"));
    }
    
  • 调用函数:

    print_href("Logic pro vaporizer")
    //or
    print_href("E cigs vaping devices")