如何在java集合hashmap或hashset或arraylist中存储webtable?

时间:2015-01-13 16:46:24

标签: java selenium xpath selenium-webdriver webdriver

在我的用户个人资料页面上的应用程序中,用户有:

Name: XYZ
Age: ##
Address: st.XYZ

依旧......

当一个元素缺失(示例年龄)时,其他行取而代之,因此我无法对xpath个元素进行硬编码。我想要的是:

我想(打印)提取整个表数据并与实际进行比较。 所以当我要求"姓名"作为关键,它应该把它的价值作为关键的价值。

我尝试了什么: 我能够获取保持tr的{​​{1}}标记元素的文本。但是对于另一个用户,当某些行丢失时,它会失败或提供错误的值。

td

上面的代码适用于this页面上排名前3位的演员,但是因为生物页面上没有丢失一行而导致第4位失败。

在生物页面上,表格中有两列具有其他属性,具有其值。我想创建一个带有键值对的集合,其中for (int i = 2; i < 58; i++) { String actor_name = new WebDriverWait(driver, 30).until(ExpectedConditions .elementToBeClickable(By.xpath(first_part+i+part_two))).getText(); System.out.print("\n"+"S.no. "+(i-1)+" "+actor_name); try { driver.findElement(By.xpath(first_part+i+part_two)).click(); new WebDriverWait(driver, 30).until(ExpectedConditions .elementToBeClickable(By.partialLinkText("bio"))).click(); //driver.findElement(By.partialLinkText("bio")).click(); } catch (Exception e) { // TODO: handle exception System.out.println("Not a link"); } Thread.sleep(5000); System.out.print(" "+driver.findElement(By.xpath("//*[@id='overviewTable']/tbody/tr[3]/td[2]")).getText()); driver.get("http://www.imdb.com/title/tt2310332/fullcredits?ref_=tt_cl_sm#cast"); } 为属性(左列的值),其key为右列的值。这样我就可以通过提及属性值获得获取值的自由。

我正在使用JAVA编写脚本。

2 个答案:

答案 0 :(得分:1)

如果您有任何问题,可以尝试使用以下代码并向我提出任何问题......

driver.get("http://www.imdb.com/title/tt2310332/fullcredits?ref_=tt_cl_sm#cast");
String height = "";
String actorName = "";
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
List<WebElement> lstUrls = driver.findElements(By
    .xpath("//span[@itemprop='name']/..")); // all a tags
List<String> urls = new ArrayList<>();
for (WebElement webElement : lstUrls) {
    urls.add(webElement.getAttribute("href")); // saving all hrefs attached in each a tag
}
Map<String, String> actorHeightData = new HashMap<String, String>();
for (String string : urls) {
    driver.get(string);
    actorName = driver.findElement(
        By.xpath(".//*[@id='overview-top']/h1/span")).getText(); // Getting actor's name
    driver.findElement(By.xpath("//a[text()='Biography']")).click(); // Clicking Biography
    try {
        height = driver.findElement(
            By.xpath("//td[.='Height']/following-sibling::td"))
                .getText(); // Getting height
    } catch (NoSuchElementException nsee) {
        height = ""; // If height not found
    }
    actorHeightData.put(actorName, height); // Adding to map
}

答案 1 :(得分:0)

您可以使用所需的所有可空字段创建类PersonData。但是没有空的吸气剂。

例如

calss PersonData{
private String name;

public getName(){
if(name == null)
return "";
return name;
}
}

并将所有人员存储在列表中。

在你的页面中,你会询问人的场地,并且总是在桌子的单元格里有东西。