使用selenium实现UI自动化(三)

接上一篇,本章讲其他常用操作

 网页操作中,我们会遇到多窗口以及多个frame的这种情况,selenium的示例如下:

#!/usr/bin/env python
# -*-coding:utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.by import By


class TestWindow:
    def setup(self):
        self.driver = webdriver.Chrome()
        self.driver.implicitly_wait(5)

    def teardown(self):
        self.driver.quit()

    def test_switch_window(self):
        self.driver.get("http://www.hao123.com")
        self.driver.maximize_window()
        current_window = self.driver.current_window_handle
        print("初始:{}".format(current_window))
        self.driver.find_element(by=By.LINK_TEXT, value="hao123推荐").click()
        handles = self.driver.window_handles
        print("所有的窗口:{}".format(handles))
        self.driver.switch_to.window(handles[1])
        self.driver.find_element(by=By.LINK_TEXT, value="娱乐").click()
        print("第二次切换后的窗口:{}".format(self.driver.current_window_handle))
        self.driver.switch_to.window(handles[0])
        print("最后切换会第一个窗口:{}".format(self.driver.current_window_handle))

操作步骤和我们切换浏览器的步骤一致。切换frame和窗口的方式大致一样,如下:

:Args:
         - frame_reference: The name of the window to switch to, an integer representing the index,
                            or a webelement that is an (i)frame to switch to.

        :Usage:
            ::

                driver.switch_to.frame('frame_name')
                driver.switch_to.frame(1)
                driver.switch_to.frame(driver.find_elements(By.TAG_NAME, "iframe")[0])

selenium的多浏览器的处理

新建一个base类,然后类中起setup和teardown方法,然后在setup中起多个if,elif做判断,最后测试类继承base类就可以了

selenium执行js代码

这里主要是用来处理selenium无法处理的一些动作,比如日期控件无法输入之类的

driver.execute_script(js代码块) #同步执行,执行完毕js后才进行其他动作
driver.execute_async_script(js代码块)#异步执行,阻塞后,不会等待js运行完毕才执行其他命令
括号内是要运行的js代码块,假如需要有个js代码块的返回,在代码块前面加上 return js代码块就可以了
多个命令的话,多个命令之间使用;隔开
driver.execute_async_script(js代码块1;js代码块2)

文件上传

input标签的话,先找到元素,然后点击对应的按钮,然后定位到对应的元素后直接使用sendkeys('path/picture.png')即可

文件弹框处理

alert弹窗的话,操作步骤和多窗口类似,如下:

#表示接受alert弹窗
driver.switch_to.alert.accept()
#表示解散alert弹窗 driver.switch_to.alert.dismiss()
#返回初始页面 driver.switch_to.default_content()

本次内容就到这里了。

posted @ 2022-05-12 18:33  逗蚂蚁  阅读(130)  评论(0)    收藏  举报