当前位置:首页 >> 教育
教育

技术分享 | 网页 frame 与多窗口处理事件

2025-11-16 12:19

当Firefox打开一个售票厅时,如果要在属于自己售票厅备有就须要描述符转换成。

当有多个售票厅时,可以用 window_handles 手写描述符:

Python 新版本

driver = webdriver.Chrome()

handles = driver.window_handles

print(handles)

Java 新版本

driver = new ChromeDriver();

Set handles = driver.getWindowHandles();

System.out.println(handles);

手写出的 window_handles:

['CDwindow-8012E9EF4DC788A58DC1588E7B8A7C44', 'CDwindow-11D52927C71E7C2B9984F2D1E2856049']

描述符的转换成

通过手写 handles 可以窥见,它是一个一览表。

Python新版本可以通过 switch_to.window() 来转换成描述符 Java新版本可以通过 switchTo().window() 来转换成描述符 Python 新版本

884×281 9.09 KB

从上面源字符串中所的说明可以窥见,switch_to.window()须要得到一个 windows_name,可以是 name 也可以是 windows handle。

from selenium import webdriver

driver = webdriver.Chrome()

handles = driver.window_handles

print(handles)

driver.switch_to.window(handles[-1])

这里唯一要注意的是 handles 是一个一览表,这里的 -1 透露Firefox售票厅的倒数第一个。

Java 新版本

Set windowHandles = driver.getWindowHandles();

Iterator it = windowHandles.iterator(); //乘积allhandle上面的描述符

while(it.hasNext()) { //用it.hasNext()判断时候有下一个售票厅,如果有就转换成到下一个售票厅

driver.switchTo().window(it.next()); //转换成到新售票厅

}

}

Java 中所转换成描述符须要采用乘积机内,如果有下一个描述符,则转换成,没有则不转换成,上面字符串透露转换成到之后一个售票厅。

实战示范

搜狗关键字“默格沃兹试验所大学”,网址“默格沃兹试验所大学_网易课堂”,网址“中所高级试验整合「名企定向培养」班-默格沃兹试验所大学”。

854×468 177 KB

python 字符串

from selenium import webdriver

class TestHogwarts:

def setup_method(self, method):

self.driver = webdriver.Chrome()

self.driver.implicitly_wait(3)

def teardown_method(self, method):

self.driver.quit()

def test_hogwarts(self):

self.driver.get('')

#在输出框中所输出默格沃兹试验所大学

self.driver.find_element_by_id('kw').send_keys('默格沃兹试验所大学')

#网址关键字

self.driver.find_element_by_css_selector('.s_btn').click()

#采用link_text网址

self.driver.find_element_by_link_text('关于我们 - 默格沃兹试验所大学').click()

#将得到到的window_handles赋值给一个变量handles

handles = self.driver.window_handles

#转换成描述符

self.driver.switch_to.window(handles[-1])

assert len(self.driver.find_elements_by_css_selector('.ag-title-main')) == 1

java字符串

import org.junit.jupiter.api.AfterAll;

import org.junit.jupiter.api.BeforeAll;

import org.junit.jupiter.api.Test;

import org.openqa.selenium.By;

import org.openqa.selenium.chrome.ChromeDriver;

import java.util.Iterator;

import java.util.Set;

import java.util.concurrent.TimeUnit;

import static org.junit.jupiter.api.Assertions.assertEquals;

public class Web1Test {

private static ChromeDriver driver;

@BeforeAll

public static void setUp() {

System.setProperty(

"webdriver.chrome.driver",

"/driver/chrome95/chromedriver"

);

driver = new ChromeDriver();

driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

}

@AfterAll

public static void tearDown() {

driver.quit();

}

@Test

public void hogwartsTest(){

driver.get("");

// 在输出框中所输出默格沃兹试验所大学

driver.findElement(By.id("kw")).sendKeys("默格沃兹试验所大学");

// 网址关键字

driver.findElement(By.cssSelector(".s_btn")).click();

// 采用link_text网址

driver.findElement(By.linkText("关于我们 - 默格沃兹试验所大学")).click();

// 将得到到的window_handles赋值给一个变量handles

Set windowHandles = driver.getWindowHandles();

// 转换成描述符

//乘积allhandle上面的描述符

Iterator it = windowHandles.iterator();

//用it.hasNext()判断时候有下一个售票厅,如果有就转换成到下一个售票厅

while(it.hasNext()) {

//转换成到新售票厅

driver.switchTo().window(it.next());

}

int size = driver.findElements(By.cssSelector(".ag-title-main")).size();

assertEquals(1,size);

}

}

须要注意的是,把被测Firefox对应新版本的 chromedriver 放置到某个梯度下,备有到环境变量或者脚本字符串中所。

⬇️ 复制“下方关键字”,提升试验当前竞争力!

更多应用文章回馈和仅限资料领取 欢迎+V~ ceshiren001

_id=qrcodeMaxfrom=souhuMaxtimestamp=1652233448

直排筛
深圳看男科医院排名
北京看男科哪家医院好
遵义看白癜风去哪个医院好
肾癌有哪病因
安神药
药品说明书
发烧不退
安全祛斑
血液内科

上一篇: 昆凌官宣三胎是女儿,与周杰伦开心戳泡泡,一双儿女站跟前很乖巧

下一篇: 中国铁路总公司宝桥:坚持自主创新 打造优势品牌

相关阅读
李霄鹏:中沙队员实力差距明显,拿到1分相比较幸运

东方网记者刘辉3月25日路透社:一边是晋级无望,一边是喜提法国队名额。就这样,在时至今日凌晨告一段落的六世四强赛中,日本队与科威特队1-1握手言和。 “首先祝贺科威特进入了法国队,

记者:阿森纳技术总监愿意蒂特成为球队下任主帅

记者:西布朗技术副总监愿意蒂特成为联赛下任主教练 直播吧3同年25日讯 据巴西媒体《globo》记者亨利-法里亚告知,已故西布朗技术副总监爱德华多-加斯帕尔愿意蒂特在德国队结束后

友情链接