Bob's Blog

Web开发、测试框架、自动化平台、APP开发、机器学习等

返回上页首页

Python加Selenium自动化测试知乎网站(六)特殊操作



除了常规操作类似点击、滑动、勾选等,偶尔会遇到需要特殊操作的时候,比如鼠标mouseover、双击、右击、拖拽、长按、移动,在某些表单的填写时就会有这类型的需求,拖动选择日期控件输入控件什么的。有时还需要模拟键盘按键。还好,selenium也支持这类型操作。

我们在utils下新增一个文件,试试其中几种操作:

from selenium.webdriver.common.action_chains import ActionChains

class SpecialAction:
    def __init__(self, driver):
        self.action_chains = ActionChains(driver)

    def mouse_over(self, element):
        self.action_chains.move_to_element(element).perform()

    def double_click(self, element):
        self.action_chains.double_click(element).perform()

    def right_click(self, element):
        self.action_chains.context_click(element).perform()

    def drag_and_drop(self, element, to):
        self.action_chains.drag_and_drop(element, to).perform()

要注意的是,需要加上perform。

现在在脚本里试试mouse over和右键:

from selenium import webdriver
from utils.special_action import SpecialAction

topic_url = "https://www.zhihu.com/topic/19552832/hot"
driver = webdriver.Chrome()
driver.get(topic_url)
action = SpecialAction(driver)
focus_topic_button = driver.find_element_by_xpath("//div[@class='TopicActions TopicMetaCard-actions']/button[contains(@class, 'TopicActions-followButton')]")
action.mouse_over(focus_topic_button)
action.right_click(focus_topic_button)

driver.close()
driver.quit()

运行后能够看到鼠标移动在关注按钮上,出现右键菜单。

接着我们试着发送键盘按键,单个按键,组合按键。

selenium中有一个叫Keys的类,这里定义的就是各类按键的ASCII码:

class Keys(object):
    """
    Set of special keys codes.
    """

    NULL = '\ue000'
    CANCEL = '\ue001'  # ^break
    HELP = '\ue002'
    BACKSPACE = '\ue003'
    BACK_SPACE = BACKSPACE
    TAB = '\ue004'
    CLEAR = '\ue005'
    RETURN = '\ue006'
    ENTER = '\ue007'
    SHIFT = '\ue008'
    ......

我们可以用send_keys来发送这些按键信息,比如我们输入关键词发送回车键,Ctrl加a全选页面内容。

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

topic_url = "https://www.zhihu.com/topic/19552832/hot"
driver = webdriver.Chrome()
driver.get(topic_url)
search_field = driver.find_element_by_xpath("//div[contains(@class, 'AppHeader-SearchBar')]//input")
search_field.send_keys("selenium")
search_field.send_keys(Keys.ENTER)  # 单个回车按键,不用点击搜索按钮
whole_page = driver.find_element_by_xpath("//html//body")
whole_page.send_keys(Keys.COMMAND, 'a')  # 组合Command+A按键

driver.close()
driver.quit()

另外ActionChains其实也能做到组合按键,只是略显麻烦:

# 代表着command键按下,同时按了字母a,再松开command键
ActionChains(driver).key_down(Keys.COMMAND).send_keys('a').key_up(Keys.COMMAND).perform()

此外,我们也会经常用到iframe、alert和浏览器窗口的操作。(知乎没有找到iframe,alert,这里就简单介绍一下用法)

对于iframe,我们需要切换进去,才能获得其中元素并操作。

iframe = driver.find_elements_by_tag_name('iframe')[0]
driver.switch_to.frame(iframe)

对于alert,我们可以获取文本、点确定,点取消。

alert = driver.switch_to.alert
print(alert.text) # 弹窗内容
alert.accept()  # 确认
alert.dimiss()	# 取消

对于窗口,有些链接点击后会新增一个window,也可以切换过去

all_windows = driver.window_handles  # 获得所有窗口
driver.switch_to.window(all_windows[-1])  # 切换到最近打开的窗口

 

下一篇:  Python加Selenium自动化测试知乎网站(七)设置检查点
上一篇:  Python加Selenium自动化测试知乎网站(五)用javascript辅助

共有0条评论

添加评论

暂无评论