如何使用Selenium Java在两个浏览器选项卡/窗口之间获取活动窗口标题
我可以在两个选项卡/窗口之间切换,但我的要求是了解或获取它们之间的活动窗口 在我的项目中,点击一个页面的webElement就会打开一个随机弹出窗口(选项卡/窗口),我想知道这个(新的)窗口是焦点还是我的原始页面 我试图使用JNAAPI获取活动窗口及其标题,但我的网页是如何使用Selenium Java在两个浏览器选项卡/窗口之间获取活动窗口标题,java,selenium,Java,Selenium,我可以在两个选项卡/窗口之间切换,但我的要求是了解或获取它们之间的活动窗口 在我的项目中,点击一个页面的webElement就会打开一个随机弹出窗口(选项卡/窗口),我想知道这个(新的)窗口是焦点还是我的原始页面 我试图使用JNAAPI获取活动窗口及其标题,但我的网页是 远程定位 非常感谢完美的解决方案 谢谢驱动程序。getTitle()将为您提供页面标题,您可以使用该标题确定您在哪个页面上,或者您是否在您想要的页面上,然后根据需要使用逻辑切换窗口getTitle()返回一个String,您可以
远程定位 非常感谢完美的解决方案 谢谢
驱动程序。getTitle()
将为您提供页面标题,您可以使用该标题确定您在哪个页面上,或者您是否在您想要的页面上,然后根据需要使用逻辑切换窗口getTitle()
返回一个String
,您可以使用其中一个String方法来比较标题,例如:
String title = getDriver().getTitle();
if(!title.equals("Expected Title")) {
//may be you would like to switch window here
}
这将为您提供页面的标题,您可以使用Selenium查看该驱动程序当前所在的页面。//获取初始窗口句柄
//get initial window handles
Set<String> prevWindowHandles = driver.getWindowHandles();
while(true){
//get current window handles
Set<String> currWindowHandles = driver.getWindowHandles();
//if one of the current window handles not equals to
//any of the previous window handles,switch to this window
//and prevWindowHandles = currWindowHandles
for(String prevHandle : prevWindowHandles){
int noEqualNum = 0;
for(String currHandle : currWindowHandles){
if(!currHandle.equals(prevHandle))
noEqualNum++
}
if(noEqualNum == currWindowHandles.size()){
driver.switchTo().window(currWindow);
prevWindowHandles = currWindowHandles;
break;
}
}
}
设置prevWindowHandles=driver.getWindowHandles();
while(true){
//获取当前窗口句柄
设置currWindowHandles=driver.getWindowHandles();
//如果当前窗口句柄之一不等于
//任何以前的窗口句柄,切换到此窗口
//和prevWindowHandles=currWindowHandles
用于(字符串prevHandle:prevWindowHandles){
int noEqualNum=0;
用于(字符串currHandle:currWindowHandles){
如果(!currHandle.equals(prevHandle))
诺奎尔南++
}
if(noEqualNum==currWindowHandles.size()){
driver.switchTo()窗口(currWindow);
prevWindowHandles=currWindowHandles;
打破
}
}
}
如果要断言标题,可以使用xpath选择器:
String pageTitle = driver.findElement(By.xpath("//title[text() = 'Title you looking for']"));
这是一个愚蠢的示例,您可以使用try/catch、实现断言或其他技术来获得所需的结果。我编写了自己的方法来切换到窗口,如果窗口标题已知,也许其中一些方法会有所帮助。我使用了Selenide(Java)方法来实现这一点,但是如果您有Vanilla WebDriver,您也可以实现同样的功能
/** Switches user to window of user's choice */
public static void switchToWindow(String windowTitle) {
WebDriver driver = getWebDriver();
// Get list of all open tabs - note behaviour may be different between FireFox and Chrome.
ArrayList<String> tabs = new ArrayList<>(driver.getWindowHandles());
// iterate through open tabs. If the title of the page is contained in the tab, switch to it.
for (String windowHandle : driver.getWindowHandles()) {
String title = getWebDriver().getTitle();
driver.switchTo().window(windowHandle);
if (title.equalsIgnoreCase(windowTitle)) {
break;
}
}
}
/**将用户切换到用户选择的窗口*/
公共静态无效切换窗口(字符串窗口标题){
WebDriver=getWebDriver();
//获取所有打开标签的列表-注意FireFox和Chrome的行为可能不同。
ArrayList tabs=新的ArrayList(driver.getWindowHandles());
//遍历打开的选项卡。如果选项卡中包含页面标题,请切换到该选项卡。
对于(字符串windowHandle:driver.getWindowHandles()){
字符串title=getWebDriver().getTitle();
driver.switchTo().window(windowHandle);
if(标题.相等信号案例(窗口标题)){
打破
}
}
}
此方法可能不会太快,但它将在当前打开的窗口中迭代,并检查标题是否与您指定的标题匹配。您尝试了什么,结果如何?就像你在学校做的那样。。。请出示你的作品。:)这是获得问题答案的过程的一部分。它对你很有帮助,因为它迫使你调查自己的问题并仔细思考。它还向读者证明,你做了功课,并做出了合理的尝试来回答自己的问题。第三,它帮助读者发现并诊断问题,从而为您提供更好的答案,减少我们浪费的时间。请为您的答案提供一些文字说明。“只有代码”的答案看起来不太好谢谢你的代码片段,它可能会提供一些有限的、即时的帮助。通过展示为什么这是一个很好的问题解决方案,A将极大地提高它的长期价值,并将使它对未来有其他类似问题的读者更有用。请在您的回答中添加一些解释,包括您所做的假设。
/** Switches user to window of user's choice */
public static void switchToWindow(String windowTitle) {
WebDriver driver = getWebDriver();
// Get list of all open tabs - note behaviour may be different between FireFox and Chrome.
ArrayList<String> tabs = new ArrayList<>(driver.getWindowHandles());
// iterate through open tabs. If the title of the page is contained in the tab, switch to it.
for (String windowHandle : driver.getWindowHandles()) {
String title = getWebDriver().getTitle();
driver.switchTo().window(windowHandle);
if (title.equalsIgnoreCase(windowTitle)) {
break;
}
}
}