【发布时间】:2019-09-06 01:08:47
【问题描述】:
我有一个包含 20 个链接的列表,其中一些是重复的。我点击第一个链接到下一页,我从下一页下载了一些文件。
第 1 页
- 链接 1
- 链接 2
- 链接 3
- 链接 1
- 链接 3
- 链接 4
- 链接 2
链接 1(点击)-->(打开)页面 2
第2页(点击返回按钮浏览器)-->(返回)第1页
现在我点击链接 2 并重复同样的操作。
System.setProperty("webdriver.chrome.driver", "C:\\chromedriver.exe");
String fileDownloadPath = "C:\\Users\\Public\\Downloads";
//Set properties to supress popups
Map<String, Object> prefsMap = new HashMap<String, Object>();
prefsMap.put("profile.default_content_settings.popups", 0);
prefsMap.put("download.default_directory", fileDownloadPath);
prefsMap.put("plugins.always_open_pdf_externally", true);
prefsMap.put("safebrowsing.enabled", "false");
//assign driver properties
ChromeOptions option = new ChromeOptions();
option.setExperimentalOption("prefs", prefsMap);
option.addArguments("--test-type");
option.addArguments("--disable-extensions");
option.addArguments("--safebrowsing-disable-download-protection");
option.addArguments("--safebrowsing-disable-extension-blacklist");
WebDriver driver = new ChromeDriver(option);
driver.get("http://www.mywebpage.com/");
List<WebElement> listOfLinks = driver.findElements(By.xpath("//a[contains(@href,'Link')]"));
Thread.sleep(500);
pageSize = listOfLinks.size();
System.out.println( "The number of links in the page is: " + pageSize);
//iterate through all the links on the page
for ( int i = 0; i < pageSize; i++)
{
System.out.println( "Clicking on link: " + i );
try
{
linkText = listOfLinks.get(i).getText();
listOfLinks.get(i).click();
}
catch(org.openqa.selenium.StaleElementReferenceException ex)
{
listOfLinks = driver.findElements(By.xpath("//a[contains(@href,'Link')]"));
linkText = listOfLinks.get(i).getText();
listOfLinks.get(i).click();
}
try
{
driver.findElement(By.xpath("//span[contains(@title,'download')]")).click();
}
catch (org.openqa.selenium.NoSuchElementException ee)
{
driver.navigate().back();
Thread.sleep(300);
continue;
}
Thread.sleep(300);
driver.navigate().back();
Thread.sleep(100);
}
代码运行良好,点击所有链接并下载文件。现在我需要改进逻辑,省略重复的链接。我试图过滤掉列表中的重复项,但不知道应该如何处理 org.openqa.selenium.StaleElementReferenceException。我正在寻找的解决方案是单击第一次出现的链接,如果再次出现,请避免单击该链接。
(这是从门户下载多个文件的复杂逻辑的一部分>我无法控制。因此请不要返回>问题,例如为什么页面上有重复的链接第一名。)
【问题讨论】:
-
嗨,如果将已经访问过的链接添加到一个单独的变量并在转换之前查看,下一个链接是否存在于已访问列表中?
-
检查我的答案,详细说明如何仅获取唯一链接和处理陈旧元素。如果您有任何问题,请告诉我。
标签: java selenium selenium-webdriver xpath