如何将 webtable 存储在 java 集合 hashmap 或 hashset 或 arraylist 中?
how to store webtable in java collection hashmap or hashset or arraylist?
在我的用户个人资料页面上的应用程序中,用户有:
Name: XYZ
Age: ##
Address: st.XYZ
等等...
当缺少一个元素(例如年龄)时,其他行将取而代之,因此我无法对元素的 xpath
进行硬编码。我想要的是:
我想(打印)提取整个 table 数据并与实际数据进行比较。
因此,当我要求 "Name" 作为键时,它应该将其前面的单元格值作为键的值。
我尝试了什么:
我能够获取 tr
标签元素的文本,保持 td
固定。但是对于另一个用户,当某些行丢失时,它会失败或给出错误的值。
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");
}
以上代码适用于 this 页面上的前 3 名演员,但对于第 4 名演员则失败,因为生物页面上没有一行丢失。
在生物页面上,table 中有两列,一列具有属性,另一列具有其值。我想创建一个包含键值对的集合,其中 key
作为属性(左列的值),其 value
作为右列的值。这样我就可以通过提及属性值来自由获取值。
我正在使用 JAVA 编写脚本。
您可以创建 class PersonData,其中包含您需要的所有可为空的字段。但是没有空吸气剂。
例如
calss PersonData{
private String name;
public getName(){
if(name == null)
return "";
return name;
}
}
并将所有人存储在列表中。
在您的页面中,您将要求人员提供字段,并且 table 的单元格中总是有内容。
你能试试下面的代码吗,如果你有任何问题,请告诉我...
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
}
在我的用户个人资料页面上的应用程序中,用户有:
Name: XYZ
Age: ##
Address: st.XYZ
等等...
当缺少一个元素(例如年龄)时,其他行将取而代之,因此我无法对元素的 xpath
进行硬编码。我想要的是:
我想(打印)提取整个 table 数据并与实际数据进行比较。 因此,当我要求 "Name" 作为键时,它应该将其前面的单元格值作为键的值。
我尝试了什么:
我能够获取 tr
标签元素的文本,保持 td
固定。但是对于另一个用户,当某些行丢失时,它会失败或给出错误的值。
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");
}
以上代码适用于 this 页面上的前 3 名演员,但对于第 4 名演员则失败,因为生物页面上没有一行丢失。
在生物页面上,table 中有两列,一列具有属性,另一列具有其值。我想创建一个包含键值对的集合,其中 key
作为属性(左列的值),其 value
作为右列的值。这样我就可以通过提及属性值来自由获取值。
我正在使用 JAVA 编写脚本。
您可以创建 class PersonData,其中包含您需要的所有可为空的字段。但是没有空吸气剂。
例如
calss PersonData{
private String name;
public getName(){
if(name == null)
return "";
return name;
}
}
并将所有人存储在列表中。
在您的页面中,您将要求人员提供字段,并且 table 的单元格中总是有内容。
你能试试下面的代码吗,如果你有任何问题,请告诉我...
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
}