9、Selenium + Python 实现 UI 自动化测试-操作浏览器窗口

来源:互联网 发布:传销组织 知乎 编辑:程序博客网 时间:2024/06/05 17:43

好,操作浏览器标签的姊妹篇,操作浏览器窗口来了。

补充点知识:

有的文章写了

这条js语句在新标签打开新页

js = "window.open('https://www.sogou.com')"
下面这条语句在新窗口打开新页

js = "window.open('https://www.sogou.com','_blank')"
实测,目前selenium 和 Chrome版本并不支持


一、使用句柄

1、直接使用句柄index值去切(也适用于标签的切换)

知识点:默认打开的第一个窗口句柄是0,第二个是1

driver.switch_to.window(handles[0])

from selenium import webdriverfrom time import sleepdriver = webdriver.Chrome()driver.get('http://www.baidu.com')js = "window.open('https://www.sogou.com','_blank')"  #js打开一个新窗口,打开sogoudriver.execute_script(js)                       #Selenium 执行js#在这里我们手动的将两个标签分离,模拟打开了两个窗口的效果sleep(5) handles = driver.window_handlesdriver.switch_to.window(handles[0])sleep(3)driver.switch_to.window(handles[1])sleep(3)driver.quit()

2、使用循环判断来切

from selenium import webdriverfrom time import sleepdriver = webdriver.Chrome()driver.get('http://www.baidu.com')js = "window.open('https://www.sogou.com','_blank')"  #js打开一个新窗口,打开sogoudriver.execute_script(js)                       #Selenium 执行js#在这里我们手动的将两个标签分离,模拟打开了两个窗口的效果sleep(5)handle = driver.current_window_handle  #这里是搜狗handles = driver.window_handlesdriver.switch_to.window(handles[0])  #切回百度sleep(3)for hle in handles:    if hle != handle:  #不等于搜狗        driver.switch_to.window(hle) #所以切回搜狗sleep(3)driver.quit()

现在浏览器貌似点击链接都是在新tab页打开页面(或者本页直接跳转),而不再是弹新窗口。百度了一下跟用户习惯有关系。Chrome没找到设置新窗口打开的位置,Firefox在设置中找到了,但是selenium控制的时候仍然新tab页打开。而之前看的调用js的办法并没有测试成功(知识随着时间真的会“失效”)。但是今天找到一个方法,按住shift键,点击链接,会在新窗口打开页面。


#导入webdriver包
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.ui import WebDriverWait


#实例化一个driver
driver = webdriver.Chrome()
#打开百度,注意前面的http://不能省略
driver.get("http://www.baidu.com")
#定位百度搜索框
ele = driver.find_element_by_link_text('新闻')
ActionChains(driver).key_down(value=Keys.SHIFT).perform()
ele.click()


sleep(2)
driver.quit()


阅读全文
0 0
原创粉丝点击