我们在做自动化测试定位元素时,经常会遇到窗口之间的切换,弹窗的问题,现在也有很多的网页是框架式的,因此在定位元素的时候就要在不同的框架之间切换,针对上面一些场景,做一个简单的总结:
多窗口之间的切换
场景一:当我们需要定位的元素两个不同的窗口并需要在不同的窗口要进行元素定位时。
首先: 获取到当前所有(这种场景只有两个窗口)的窗口句柄

windows =  driver.window_handles

然后,获取打开的第一个窗口句柄

window_1 = driver.current_window_handle

最后,切换到最新打开的窗口:

for current_window in windows:
	if current_window != window_1:
		driver.switch_to.window(current_window)

场景二:页面打开了多个窗口,想要切换到最新打开的窗口时。
首先,获取打开的所有(打开了多个)窗口句柄:

windows = driver.window_handles

其次,切换到当前最新打开的窗口:

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

切换到弹窗
使用场景:当我们在网页上浏览提交数据时,很多时候都会遇到弹窗提示。我们在用selenium的webdriver定位页面元素时,往往定位不到弹窗,因此我们需要先切换到弹窗去,然后再对其进行操作。
1、切换到弹窗:

driver.switch_to_alert()

2、对弹窗进行操作:

driver.switch_to_alert().accept() #点击弹窗的“确定”按钮
driver.switch_to_alert().dismiss()#点击弹窗的“取消”按钮
driver.switch_to_alert().text()#获取弹窗的文本信息
driver.seitch_to_alert().send_keys("需要输入的字符串")#输入字符串

框架之间的切换
现在的很多网页都是框架式结构,我们的webdriver只能在一个HTML代码块中去查找,而框架式结构的网页是不同的框架有各自单独的HTML代码块,因此,我们在定位元素之前,首先要定位到我们需要定位元素所在的框架,然后再进行元素定位。那么该如何定位到框架呢?其实很简单。
首先,定位到主框架:

driver.switch_to.default_content()

其次切换到目的框架,根据框架的id或name属性(假设目的框架的name属性为“main_frame”):

driver.switch_to.frame("main_frame")

假设我们现在需要从“main_frame”框架切换到“menu_frame”框架有该如何做呢?
首先还是要切到主框架,然后再切换到“menu_frame”框架

driver.switch_to.default_counten()
driver.switch_to,frame("menu_frame")

定位下拉框的选项
我们在查找元素的时候,经常会遇到下拉框选择的场景。比如地区选择的下拉框。国家、省份、城市、地区之间是存在逻辑关系的,当我们在省份选择了陕西之后,城市就只能选择陕西省的城市,不能选择其他省份的城市,比如成都。所以当我们遇到这种情况时,就需要定位到下拉框,然后根据下拉框中的选项进行选择。

driver.find_element(By.XPATH,"//select[@name='city']/option[text()='%s'%City]").click()

这样的话我们只需要知道下拉框的name或ip属性就可以定位到所需的下拉框,然后进行选择和操作。
以上是在学习seleniu+Python自动化测试开发时遇到的一些问题的小结,以便于能够充分的掌握,不足之处希望多多指教,在犯错中不断的学习不断的进步。