如何专注于第二个选项卡并使用 selenium webdriver 处理它
Posted
技术标签:
【中文标题】如何专注于第二个选项卡并使用 selenium webdriver 处理它【英文标题】:How to focus on second tab and work on it using selenium webdriver 【发布时间】:2017-01-19 20:16:20 【问题描述】:我已经打开了链接,现在我点击了该页面上的登录链接, 通过单击登录按钮,它会自动在新选项卡中打开。我必须在该选项卡中填写表格。为此,我尝试了以下代码:
Actions act = new Actions(Initialsetupfirefox.driver);
new Actions(Initialsetupfirefox.driver) .keyDown(Keys.CONTROL).click(Initialsetupfirefox.driver.findElement(By.xpath("//a[contains(text(),'LOGIN')]")))
.keyUp(Keys.CONTROL)
.perform();
Thread.sleep(3000);
new Actions(Initialsetupfirefox.driver).sendKeys(Initialsetupfirefox.driver.findElement(By.tagName("html")), Keys.CONTROL).sendKeys(Initialsetupfirefox.driver.findElement(By.tagName("html")),Keys.NUMPAD2).build().perform();
通过这个,我可以切换焦点,但无法在此选项卡中执行任何操作。 请推荐
【问题讨论】:
在与元素交互之前需要切换新打开的选项卡,关注this link for switching window 但我正在切换标签 【参考方案1】:获取浏览器选项卡并随心所欲:
List<String> browserTabs = Lists.newArrayList(driver.getWindowHandles());
driver.switchTo().window(browserTabs.get(1)); // Switch to second tab
// Do something on second tab here...
driver.switchTo().window(browserTabs.get(0)); // Return to first tab
// Do something on first tab here...
【讨论】:
【参考方案2】:这是在 Node.js 和 Typescript 中使用 selenium 时的代码
const mainHandle = await this.driver.getWindowHandle();
// load new tab here ..
const allHandles = await this.driver.getAllWindowHandles();
for (const handle of allHandles)
if (handle !== mainHandle)
await this.driver.switchTo().window(handle);
【讨论】:
【参考方案3】:你可以这样做:
Set<String> handles = driver.getWindowHandles();
String currentHandle = driver.getWindowHandle();
for (String handle : handles)
if (!handle .equals(currentHandle))
driver.switchTo().window(handle);
//fill your form in the other tab
......
//go back to first tab if you want
driver.switchTo().window(currentHandle);
【讨论】:
以上是关于如何专注于第二个选项卡并使用 selenium webdriver 处理它的主要内容,如果未能解决你的问题,请参考以下文章
以连续形式连接的组合框 - 如果依赖于第一个组合,第二个组合不会显示其值我该如何解决