我试图编写一个小应用程序(机器人),它将使用webdriver登录该站点,在搜索字段中搜索某些数据,然后通过单击从列表中选择每个元素其中之一,返回列表然后选择具有相同类名但父母不同的下一个元素。 我想我知道如何获得具有相同类名的所有元素:
List<WebElement> incognito_user = driver.findElements(By.xpath("//*[@id='results']/li[2]/div/h3/a"))
但是我需要一些for循环的帮助,这些循环将索引所有这些循环并转到下一页。
答案 0 :(得分:0)
我以不同的方式解决了这个问题:
boolean inLoop = true;
int maxPages = 2;
while(inLoop && (maxPages-- > 0)) {
List<WebElement> incognito_user = driver.findElements(By.xpath("xpath"));
String openInNewTab = Keys.chord(Keys.CONTROL, Keys.RETURN);
for (WebElement element : incognito_user) {
element.sendKeys(openInNewTab);
driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL, Keys.PAGE_DOWN);
waitSecs(randomNumber(5, 10));
driver.switchTo().window(new ArrayList<String>(driver.getWindowHandles()).get(1));
driver.close();
driver.switchTo().window(new ArrayList<String>(driver.getWindowHandles()).get(0));
waitSecs(randomNumber(5,10));
}
List<WebElement> nextElements = driver.findElements(By.xpath("xpath"));
if (nextElements.size() > 0) {
nextElements.get(0).click();
waitSecs(randomNumber(5,10));
}
else {
inLoop = false;
}
}
谢谢你的帮助。 亲切的问候
答案 1 :(得分:-1)
如果你需要处理元素列表,那么刚刚创建了selenium的包装器
点击()
public String clickButton(String parentClassIdentifier,String childClassIdentifier ,String index) throws IOException{
WebElement parentButtonList = (WebElement)driver.findElementByXPath((parentClassIdentifier));
List<WebElement> childButtonList = parentButtonList.findElementsByXPath((childClassIdentifier));
int button_index = Integer.parseInt(prop.getProperty(index)); // conversion from String to Int
childButtonList.get(button_index).click();
Application_Log.info("Clicked on button :- " ,childClassIdentifier +index );
return "pass";
}
只需通过在代码
中传递标识符和列表索引来使用clickButton()