我把这个作为面试问题。 需要帮助解决这个问题 场景:存在一个包含10个Web链接列表的网页。单击每个Web链接,然后使用selenium Java在新窗口或选项卡中打开。 示例here。
点击 WebDriver 教程中的所有教程。应该在新标签页中打开
答案 0 :(得分:0)
您可以使用JavascriptExecutor
代码:
public static void main(String args[]) {
System.setProperty("webdriver.chrome.driver", "drivers/chromedriver.exe");
WebDriver driver=new ChromeDriver();
driver.get("https://www.guru99.com/selenium-tutorial.html");
driver.manage().window().maximize();
WebDriverWait wait=new WebDriverWait(driver,20);
wait.until(ExpectedConditions.titleContains("Selenium Tutorial"));
List<WebElement> tutorialLinkList=driver.findElements(By.xpath("//strong[contains(text(),'Tutorial')]/ancestor::a"));
JavascriptExecutor js=(JavascriptExecutor)driver;
//I have just clicked only 10 link. If you want to iterate all the available links, then use foreach loop
for(int i=0;i<10;i++){
String url=tutorialLinkList.get(i).getAttribute("href");
js.executeScript("window.open(arguments[0])",url); //New Tab will be opened
}
}
注意:在这里,我只打开了不同标签中的前10个链接。如果您想在新标签页中打开所有链接,那么我建议使用如下所示的foreach
循环
for(WebElement tutoialLink : tutorialLinkList){
String url=tutoialLink.getAttribute("href");
js.executeScript("window.open(arguments[0])",url); //New Tab will be opened
}
编辑: 带有操作类的代码
在该URL中右键单击不起作用,因此,您可以通过执行以下Ctr + click
操作来打开链接为新标签
public static void main(String args[]) {
System.setProperty("webdriver.chrome.driver", "drivers/chromedriver.exe");
WebDriver driver=new ChromeDriver();
driver.get("https://www.guru99.com/selenium-tutorial.html");
driver.manage().window().maximize();
WebDriverWait wait=new WebDriverWait(driver,20);
wait.until(ExpectedConditions.titleContains("Selenium Tutorial"));
List<WebElement> tutorialLinkList=driver.findElements(By.xpath("//strong[contains(text(),'Tutorial')]/ancestor::a"));
Actions action = new Actions(driver);
//I have just clicked only 10 link. If you want to iterate all the available links, then use foreach loop
for(int i=0;i<10;i++){
action.keyDown(Keys.CONTROL).click(tutorialLinkList.get(i)).keyUp(Keys.CONTROL).build().perform();
}
}
答案 1 :(得分:0)
根据您在评论部分的回复,您可以通过硒中提供的 Actions类实现相同的行为。
您可以尝试以下代码:
public class Amisha {
static WebDriver driver ;
public static void main(String[] args) throws InterruptedException {
System.setProperty("webdriver.chrome.driver", "C:\\Users\\user***\\Downloads\\chromedriver_win32\\chromedriver.exe");
driver = new ChromeDriver();
driver.manage().window().maximize();
driver.get("https://www.guru99.com/selenium-tutorial.html");
JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("window.scrollBy(0,650)", "");
List<WebElement> element = driver.findElements(By.xpath("//strong[text()='WebDriver Tutorial']/following-sibling::table[1]/descendant::a"));
Actions action = new Actions(driver);
for(WebElement ele:element) {
action.keyDown(Keys.LEFT_CONTROL).moveToElement(ele).click().keyUp(Keys.LEFT_CONTROL).build().perform();
}
}
}