如何使用 java 查找和列出 ul li 标签下的元素和 ul li 在 selenium 中的 div 下?
How to find and list element which comes under a tag of ul li and ul li comes under div in selenium using java?
网站:https://stores.lenskart.com/
在此网站中,我想列出商店名称、地址和手机号码
下面是我试过的代码。
public class fetchdata {
public void fetchbengaluru() {
suites.setupEnviroment();
WebDriver driver = suites.getWebDriver();
List<WebElement> div1 = driver.findElements(By.xpath("//div[@class='border-manage store-info-box']"));
System.out.println("No. of Stores: " + div1.size());
try {
for (int i = 0; i < div1.size(); i++) {
String storename = div1.get(i).findElement(By.xpath("//div[@class='store_name']")).getText();
System.out.println("Store Name" + storename);
}
} catch (Exception e) {
System.out.println(e);
}
}
}
在上面的代码中,我得到的商店总数为 20,但无法列出他们的姓名和手机号码。
显示元素未找到消息
根据我的理解,我无法找到该元素,因为它来自 ul-li 和标签
试试下面的代码,我们需要 select Xpath 以正确的方式填充数据。
driver.get("https://stores.lenskart.com/");
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
driver.findElementById("OutletSearch").sendKeys("Chennai", Keys.ENTER);
List<WebElement> storedetails = driver.findElementsByXPath("//a[@title='Lenskart.com']/b");
int storecount = storedetails.size();
System.out.println(storecount);
for(int i=1;i<=storecount;i++) {
String storename = driver.findElementByXPath("//div[@class='border-manage store-info-box']["+i+"]/ul//b").getText();
String storephonenumber = driver.findElementByXPath("//div[@class='border-manage store-info-box']["+i+"]/ul/li[6]").getText();
System.out.println(storename + " : "+storephonenumber.substring(0, 13));
}
输出结果如下
Lenskart.com 在 Purasawalkam:+91******
Lenskart.com 在 Nungambakkam:+91******
Lenskart.com 在 Tondiarpet:+91******
Lenskart.com 在罗亚普拉姆:+91******
Lenskart.com 在 Mylapore:+91******
你可以简单的存入list,然后借助for循环一个一个打印出来
我只得到 "total" as total=address.size() 一次,因为所有 3 个元素都相同,然后打印所有值。
package newproj;
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
public class Lenskart {
public static void main(String[] args) throws InterruptedException {
// TODO Auto-generated method stub
String url="https://stores.lenskart.com";
System.setProperty("webdriver.chrome.driver", "D:\Selenium\chromedriver_win32\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.get(url);
driver.manage().window().maximize();
Thread.sleep(5000);
List<WebElement> name=driver.findElements(By.xpath("//li[@class='store_name redirectHome']"));
List<WebElement> address=driver.findElements(By.xpath("//li[@class='store_address redirectHome']"));
List<WebElement> phone=driver.findElements(By.xpath("//li[@class='store_phone']"));
int total=address.size();
for(int i=0;i<total;i++)
{
System.out.println("\n");
System.out.println("New address="+i);
System.out.println(name.get(i).getText());
System.out.println(address.get(i).getText());
System.out.println(phone.get(i).getText());
System.out.println("\n");
}
driver.close();
}
}
输出将采用这种模式。
新地址=0
Lenskart.com 科学城路, Sola
御坊地下01号铺
索拉科学城路
艾哈迈达巴德 - 380060
+917428891186
呼叫
新地址=1
Lenskart.com 在 Gurukul 路,Memnagar
Shilp Complex 1号铺
Gurukul 路,Memnagar
艾哈迈达巴德 - 380052
+917428891192
呼叫
.....
and so on.
.
希望对您有所帮助。
网站:https://stores.lenskart.com/ 在此网站中,我想列出商店名称、地址和手机号码
下面是我试过的代码。
public class fetchdata {
public void fetchbengaluru() {
suites.setupEnviroment();
WebDriver driver = suites.getWebDriver();
List<WebElement> div1 = driver.findElements(By.xpath("//div[@class='border-manage store-info-box']"));
System.out.println("No. of Stores: " + div1.size());
try {
for (int i = 0; i < div1.size(); i++) {
String storename = div1.get(i).findElement(By.xpath("//div[@class='store_name']")).getText();
System.out.println("Store Name" + storename);
}
} catch (Exception e) {
System.out.println(e);
}
}
}
在上面的代码中,我得到的商店总数为 20,但无法列出他们的姓名和手机号码。 显示元素未找到消息 根据我的理解,我无法找到该元素,因为它来自 ul-li 和标签
试试下面的代码,我们需要 select Xpath 以正确的方式填充数据。
driver.get("https://stores.lenskart.com/");
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
driver.findElementById("OutletSearch").sendKeys("Chennai", Keys.ENTER);
List<WebElement> storedetails = driver.findElementsByXPath("//a[@title='Lenskart.com']/b");
int storecount = storedetails.size();
System.out.println(storecount);
for(int i=1;i<=storecount;i++) {
String storename = driver.findElementByXPath("//div[@class='border-manage store-info-box']["+i+"]/ul//b").getText();
String storephonenumber = driver.findElementByXPath("//div[@class='border-manage store-info-box']["+i+"]/ul/li[6]").getText();
System.out.println(storename + " : "+storephonenumber.substring(0, 13));
}
输出结果如下
Lenskart.com 在 Purasawalkam:+91******
Lenskart.com 在 Nungambakkam:+91******
Lenskart.com 在 Tondiarpet:+91******
Lenskart.com 在罗亚普拉姆:+91******
Lenskart.com 在 Mylapore:+91******
你可以简单的存入list,然后借助for循环一个一个打印出来
我只得到 "total" as total=address.size() 一次,因为所有 3 个元素都相同,然后打印所有值。
package newproj;
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
public class Lenskart {
public static void main(String[] args) throws InterruptedException {
// TODO Auto-generated method stub
String url="https://stores.lenskart.com";
System.setProperty("webdriver.chrome.driver", "D:\Selenium\chromedriver_win32\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.get(url);
driver.manage().window().maximize();
Thread.sleep(5000);
List<WebElement> name=driver.findElements(By.xpath("//li[@class='store_name redirectHome']"));
List<WebElement> address=driver.findElements(By.xpath("//li[@class='store_address redirectHome']"));
List<WebElement> phone=driver.findElements(By.xpath("//li[@class='store_phone']"));
int total=address.size();
for(int i=0;i<total;i++)
{
System.out.println("\n");
System.out.println("New address="+i);
System.out.println(name.get(i).getText());
System.out.println(address.get(i).getText());
System.out.println(phone.get(i).getText());
System.out.println("\n");
}
driver.close();
}
}
输出将采用这种模式。
新地址=0
Lenskart.com 科学城路, Sola
御坊地下01号铺
索拉科学城路
艾哈迈达巴德 - 380060
+917428891186
呼叫
新地址=1
Lenskart.com 在 Gurukul 路,Memnagar
Shilp Complex 1号铺
Gurukul 路,Memnagar
艾哈迈达巴德 - 380052
+917428891192
呼叫
.....
and so on.
.
希望对您有所帮助。