我需要一些帮助,以便在自动测试中从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;
}
答案 0 :(得分:1)
尝试使用新的Torello网络抓取软件包。效果很好。 Selenium可以使您的网页点击自动化,但这可以快速获取服务器端针对Java的HTML-Vector:
以下是一些使用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")