技术分享 | 网页 frame 与多窗口处理事件
2025-11-16 12:19
当有多个售票厅时,可以用 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》记者亨利-法里亚告知,已故西布朗技术副总监爱德华多-加斯帕尔愿意蒂特在德国队结束后
- 01-31约基奇蝉联MVP的呼声很高?多项数据联盟第一,球队战绩是破绽
- 01-31烈了!两战狂败55分!NBA最菜的强队!!
- 01-31韩国的蹦床女神,只因嫁给中国运动员,却被韩国网友说是叛徒??
- 01-31晚上18点!孙颖莎意外事故点名队友,首次回应单打失利,让人肃然起敬
- 01-31平淡打球甘做绿叶的任骏飞,不可多得的全能战士,实力远大于名气!!
- 01-31两张布比较!唐斯和诺维斯基,谁是史上最伟大的大个子射手?
- 01-31大巴黎被皇马淘汰!波切蒂诺先是 纳赛尔莱昂纳多把裁判给揍了!!
- 01-31作死?从西欧冠军到连续2届世界杯出局 意大利0-1补时遭马其顿绝杀
- 01-31曼联研究后发现:直板打法的消亡,是历史的必然?!!
- 01-31纷纷“不务正业”,保有一位会进攻的门将是怎样的体验???