【Selenium自动化测试】滑动解锁与窗口截图、关闭

滑动解锁

滑动解锁是目前Web测试中最常遇到的,常见于登录验证之类的场景,针对滑动操作,webdriver提供了ActionChains类来处理此类场景的操作。下面通过两个例子来了解下如何使用。

# case1
from time import sleep
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from selenium.common.exceptions import UnexpectedAlertPresentException

driver = webdriver.Chrome()
driver.get("https://www.helloweba.net/demo/2017/unlock/")
# 定位滑动块(可拖拽的最左侧的小块)
slider = driver.find_elements(By.CLASS_NAME,"slide-to-unlock-handle")[0]
# print(slider)
action = ActionChains(driver)
action.click_and_hold(slider).perform()
action.move_by_offset(300,0).perform()
success_text = driver.switch_to.alert.text
print("成功的弹框",success_text)
sleep(5)

主要用到ActionChains中下面的两个方法:

  • click_and_hold(): 单击并按下鼠标左键,在鼠标事件中介绍过。
  • move_by_offset():移动鼠标,第一个参数为x 坐标距离,第二个参数为y坐标距离。

效果图如下:

【Selenium自动化测试】滑动解锁与窗口截图、关闭_第1张图片

# case 2
from time import sleep
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://www.jq22.com/yanshi4976")
sleep(2)
driver.switch_to.frame("iframe")
driver.find_element(By.ID,"appDate").click()

# 定位要滑动的年、月、日
dwwos = driver.find_elements(By.CLASS_NAME,'dwwo')
year = dwwos[0]
month = dwwos[1]
day = dwwos[2]

action = ActionChains(driver)
action.click_and_hold(year).perform()
action.move_by_offset(0,-200).perform()


sleep(3)
driver.quit()

通过滑动操作选择时间日期。效果如下
【Selenium自动化测试】滑动解锁与窗口截图、关闭_第2张图片

窗口截图

在自动化测试过程中,有时对页面进行截图已确认成功或失败时的画面,webdriver为我们提供了save_screenshot()来进行截图,该方法只有一个参数filename,文件名可以携带路径。(另:WebDriver 建议使用png 作为图片的后缀名)

from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep

driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.find_element(By.ID,'kw').send_keys("海贼王")
driver.find_element(By.ID,'su').click()
sleep(3)
driver.find_element(By.LINK_TEXT,'图片').click()

# 截取当前窗口,指定截图图片的保存位置
driver.save_screenshot("./files/images/baidu_img.png")

sleep(1)
driver.quit()

窗口关闭

在前面的例子或此前的文章中我们在程序结尾都会看到quit()这个方法,此方法用来关闭浏览器。除此之外还有一个close()方法

相同点:

  • close()quit() 都是管理浏览器

区别:

  • close ():只关闭当前句柄所在窗口,当浏览器只打开一个窗口时,其表现就相当于关闭整个浏览器,但是不会退出webdriver
  • quit():不仅关闭浏览器,而且还会退出webdriver,最后释放driver server的资源

下面通过两个例子来感受一下两者的区别:

# close()之关闭了新打开的窗口,浏览器未关闭
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time
from selenium.webdriver.common.action_chains import ActionChains

driver =webdriver.Chrome()
driver.get("http://www.baidu.com")
driver.find_element(By.LINK_TEXT,"新闻").click()
cur_win = driver.current_window_handle

all_win = driver.window_handles
# 将窗口句柄切换为新打开的tab页
for i in all_win:
    if i != cur_win:
        driver.switch_to.window(i)

time.sleep(3)
# 关闭新打开的tab页
driver.close()

# 使浏览器保留
input("t")

上述代码运行结果:关闭了新tab页后,执行了最后一行代码,浏览器还在。


from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time
from selenium.webdriver.common.action_chains import ActionChains

driver =webdriver.Chrome()
driver.get("http://www.baidu.com")
driver.find_element(By.LINK_TEXT,"新闻").click()
cur_win = driver.current_window_handle

all_win = driver.window_handles
# 将窗口句柄切换为新打开的tab页
for i in all_win:
    if i != cur_win:
        driver.switch_to.window(i)

time.sleep(3)

driver.quit()

# 使浏览器保留
input("t")

上述代码运行结果:关闭了整个浏览器,浏览器已经关闭就算运行最后一行代码也无济于事。

以上就是本期文章的所有内容,感谢观看,如果对您有帮助请点赞关注+收藏,一键三连,多谢支持!

你可能感兴趣的:(Selenium教程,自动化测试,selenium,python,chrome)