我的代码
WebDriver driver = new FirefoxDriver();
driver.get("https://google.com");
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS);
driver.findElement(By.name("q")).sendKeys("selenium");
driver.findElement(By.xpath("//button[@value='Search']")).click();
List<WebElement> alllinks = driver.findElements(By.xpath("//div[3][@class='_NId']/div/div/div/h3"));
for(WebElement cl:alllinks)
{
System.out.println(cl.getText());
if(cl.getText()!="")
{
cl.click();
}
}
通过上面的代码,我没有得到任何例外,但我也无法点击网页上的任何链接,我只想逐个点击每个链接。请告诉我解决方案如何做到这一点,谢谢提前。
答案 0 :(得分:0)
您打开所有链接的假设是正确的,但代码无法显示所需的输出
1&GT;当针对“Selenium”关键字显示Google搜索结果时,您可以在那里找到许多链接。因此,如果您手动点击每个链接 - 它会在同一个标签中打开,通过该标签,其他链接将无法访问,因为WebDriver会为您提供org.openqa.selenium.StaleElementReferenceException:
例外。
现在试试这段代码:
open some driver
driver.get("https://google.com");
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS);
driver.findElement(By.name("q")).sendKeys("selenium");
driver.findElement(By.xpath("//button[@value='Search']")).click();
List<WebElement> alllinks = driver.findElements(By.xpath("//div[3][@class='_NId']/div/div/div/h3"));
for(WebElement cl:alllinks)
{
System.out.println(cl.getText());
if(cl.getText()!="")
{
Actions action = new Actions(driver); // I have added these lines
action.keyDown(Keys.CONTROL).moveToElement(cl).click().perform();
action.keyUp(Keys.CONTROL).perform();
}
}
所以现在所有链接都会在新标签页中打开,然后就可以了。