在测试的时候,我们不可避免地需要用到鼠标键盘操作,那么在自动化测试中如何编写对应的代码呢?这就不得不提到Selenium中的ActionChains模块。ActionChains,顾名思义就是动作链的意思。通常我们可以用这样的格式去进行鼠标的单击左键操作:
ActionChains(driver).click(element).perform()
要注意的是,一定要在操作后面加上perform()方法——执行动作链,否则操作不会执行。那么ActionChains都有哪些主要的属性和方法呢?首先毫无疑问的是我们需要引入ActionChains和Keys模块,Keys中包含一些特殊的键盘按键,可以让我们引用,比如:Ctrl、F1~F12,A~Z等等。引入这两个模块的代码如下:
from selenium.webdriver.common.keys import Keys
from selenium.webdriver import ActionChains
(一)click点击
主要包括 click 单击鼠标左键、double_click 双击鼠标左键、context_click 单击鼠标右键 这三个方法,这里我分别用三个例子来一一对他们进行代码验证:
1.单击鼠标左键百度首页的“新闻”,打开新闻标签页
2.双击鼠标左键百度首页的 “地图”,打开地图标签页
3.单击鼠标右键百度首页的“视频”,并且按照弹出的菜单框,键盘点击“T”,打开视频标签页
1、click(on_element=None) 单击鼠标左键
(1)具体代码操作
单击鼠标左键 百度首页的“新闻”,打开新闻标签页,通过for循环切换到新闻页,验证标题中是否包含特定内容“新闻”,打印结果。
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.keys import Keys
from selenium.webdriver import ActionChains
class TestCase(object):
def __init__(self):
self.driver = webdriver.Chrome()
self.url = 'http://www.baidu.com'
self.driver.maximize_window()
self.driver.get(self.url)
self.mainWindow = self.driver.current_window_handle
def test_click(self):
news = self.driver.find_element_by_css_selector('#s-top-left > a') #“新闻”元素
ActionChains(self.driver).click(news).perform() #在元素上单击鼠标左键,打开新闻网页
sleep(2)
self.test_open_page('新闻')
self.driver.switch_to.window(self.mainWindow) #切回百度首页
#用来判断是否打开特定标签页
def test_open_page(self, title_in):
for handle in self.driver.window_handles:
self.driver.switch_to.window(handle)
if title_in in self.driver.title:
print('It is true, open page', self.driver.title)
break
if __name__ == '__main__':
test = TestCase() #实例化TestCase类
test.test_click() #调用测试方法
(2)控制台结果
已打开新闻标签页,如下图所示:
(3)注意事项及附加知识点
要注意的是,在上面的代码中,用到了一个test_open_page()方法,大家肯定觉得奇怪,点击“新闻”元素后,新闻标签页不是已经打开了也显示在最前面了,为什么还要使用switch_to.wind