[英]Navigation through link list massive in Selenium + Java
我需要一個可以瀏覽在線個人資料並返回的腳本。 我有一些代碼可以顯示頁面上有多少在線個人資料鏈接:
driver.get("http://mygirlfund.com");
driver.findElement(By.id("email")).sendKeys("somemail");
driver.findElement(By.id("password")).sendKeys("somepass");
driver.findElement(By.id("btn-submit")).submit();
driver.findElement(By.xpath(".//*[@id='btn-2i']/a")).click();
// log in
List<WebElement> allLinks = driver.findElements(By.xpath("//img[@alt='Online Now!']/../..//a"));
// miracle, have found links of all online profiles
System.out.println(allLinks.size());
for (int i = 1; i < allLinks.size(); i++)
{
for (WebElement link : allLinks)
{
link.click();
driver.navigate().back();
// here write a message
}
i++;
// navigating through user profiles
}
因此,我需要單擊一個鏈接,然后返回到上一(主)頁面,但它僅導航至第一個鏈接並返回。
-loop的外部for
是什么? 為什么用1(而不是0)初始化i
? 為什么你增加i
兩次? 內部循環應足夠:
List<WebElement> allLinks = driver.findElements(By.xpath("//img[@alt='Online Now!']/../..//a"));
for (WebElement link : allLinks) {
link.click();
driver.navigate().back();
}
或者,您可以像這樣在for循環中一個接一個地檢索Web元素(但是,如果鏈接少於25個,則會引發Exception):
for (int i = 0; i < 25; i++) {
String xpath = "//img[@alt='Online Now!']/../..//a[" + (i+1) + "]";
WebElement link = driver.findElement(By.xpath(xpath));
link.click();
//....
}
我發現,當我更新網頁時,配置文件鏈接的后果正在崩潰。 因此,決定在新窗口中打開配置文件鏈接。 做一些動作並關閉它。 正如上面的家伙所說,使用兩個循環是愚蠢的決定。 這段代碼非常適合我:
for(WebElement link : driver.findElements(By.xpath("//img[@alt='Online Now!']/../..//a"))){
String originalWindow =driver.getWindowHandle();
System.out.println("Original handle is: "+ originalWindow);
//open link in new window
act.contextClick(link).perform();
act.sendKeys("w").perform();
Thread.sleep(4000);
for (String newWindow : driver.getWindowHandles())
{
driver.switchTo().window(newWindow);
System.out.println("NOW THE CURRENT Handle is: "+ newWindow);
}
Thread.sleep(2000);
//here write a message
driver.close();
driver.switchTo().window(originalWindow);
}
注意:當我在變量中存儲找到的鏈接並在循環中使用它時:
List<WebElement> allLinks = driver.findElements(By.xpath("//img[@alt='Online Now!']/../..//a"));
//have found links of all online profiles
System.out.println(allLinks.size());
for (WebElement link : allLinks)
{
String originalWindow =driver.getWindowHandle();
System.out.println("Original handle is: "+ originalWindow);
//open link in new window
act.contextClick(link).perform();
act.sendKeys("w").perform();
Thread.sleep(4000);
//continue handling new window
我的腳本會永久打開剛建立的第一個鏈接。 可能對某人有用。 謝謝大家!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.