使用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()
本次内容就到这里了。
浙公网安备 33010602011771号