java - 在同一浏览器 Selenium (JAVA) 中同时打开多个 URL
问题描述
我知道如何在不同的浏览器上同时打开多个 URL(在多个浏览器上进行 Selenium 并行测试 (JAVA))。但是我的要求是在不同的选项卡中打开多个 URL,但只使用一个浏览器。有没有办法做到这一点?
这是我尝试过的,但我无法打开新标签。
//mainclass
public static void main(String a[])
{
WebDriver wd = BrowserClass.getWebDriver();
Thread t1 = new Thread(new ParallelOpenUrl(wd));
t1.setName("https://www.google.com");
Thread t2 = new Thread(new ParallelOpenUrl(wd));
t2.setName("https://www.manageengine.com");
Thread t3 = new Thread(new ParallelOpenUrl(wd));
t3.setName("https://www.zoho.com");
t1.start();
t2.start();
t3.start();
}
public class ParallelOpenUrl implements Runnable
{
private WebDriver wd = null;
public ParallelOpenUrl(WebDriver wd)
{
this.wd = wd;
}
@Override
public void run()
{
try
{
BrowserClass.openTab(wd);
Thread.sleep(1000);
wd.switchTo().window(BrowserClass.getCurrentTab());
wd.get(Thread.currentThread().getName());
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
wd.close();
}
}
}
//BrowserClass
public static String getCurrentTab(WebDriver wd)
{
Set<String> allTabs = wd.getWindowHandles();
ArrayList<String> tabs = Lists.newArrayList(allTabs);
return tabs.get(tabs.size()-1);
}
public static WebDriver getWebDriver()
{
private WebDriver wd = null;
if(wd == null)
{
System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe");
wd = new ChromeDriver();
}
return wd;
}
public static void openTab() throws Exception
{
Robot rb = new Robot();
rb.keyPress(KeyEvent.VK_CONTROL);
rb.keyPress(KeyEvent.VK_T);
rb.keyRelease(KeyEvent.VK_CONTROL);
rb.keyRelease(KeyEvent.VK_T);
}
浏览器同时打开选项卡。但一次只有一个选项卡处于活动状态。也就是说,只有在标签 1 完成加载 google.com 后,标签 2 才开始加载 zoho.com。
解决方案
Thread.sleep()
打开新标签和切换到新标签时需要小。
public void openMultipleURLs() throws InterruptedException, AWTException {
for (String url: URLs) {
openNewTab(driver);
switchToNewTab();
driver.get(url);
// do something on each web
}
}
public String[] URLs = {
"https://www.google.com", "https://www.stackoverflow.com", "https://www.microsoft.com"
};
public void switchToNewTab() throws AWTException, InterruptedException {
ArrayList<String> winHandles = new ArrayList<String> (driver.getWindowHandles());
Thread.sleep(500);
int newTabIndex = winHandles.size();
driver.switchTo().window(winHandles.get(newTabIndex - 1));
}
public void openNewTab(WebDriver driver) throws AWTException, InterruptedException {
Robot rob = new Robot();
rob.keyPress(KeyEvent.VK_CONTROL);
rob.keyPress(KeyEvent.VK_T);
rob.keyRelease(KeyEvent.VK_CONTROL);
rob.keyRelease(KeyEvent.VK_T);
Thread.sleep(100);
}
推荐阅读
- r - RStudio,更新包,重新启动 R,RStudio 进入无限循环
- amazon-web-services - s3fs 获取文件抛出输入/输出错误或无法从远程文件“/mnt/s3/”读取:失败
- r - 在 r 中使用 ggplot2 创建散点图,其中包含所有点但点的 1 条回归线通过分组变量进行区分
- terraform-provider-azure - 在创建资源之前创建服务原则
- linq - 无法使用 MVC 核心中的影子属性翻译 LINQ 表达式
- java - Checkstyle 说“可以删除条件逻辑”?
- angular - Angular 6导航上的量角器超时
- git - 如何在 GitHub 主仓库中获取新文件
- recursion - GnuCOBOL:尝试创建递归用户定义函数
- environment-variables - Fluentd 环境变量未在进程中提取