本文共 7141 字,大约阅读时间需要 23 分钟。
WebDriver,又称Selenium 2,是一种主流的Web应用自动化测试框架,拥有清晰的面向对象API,能够以最佳方式与浏览器进行交互。支持的浏览器包括Mozilla Firefox、Google Chrome、Microsoft Internet Explorer、Opera、Safari、Apple iPhone、Android浏览器等。
在之前的文章中,我们已经确认使用Python进行WebDriver编码和操作。Python+Selenium WebDriver环境的搭建分为两部分:安装Python和安装Selenium。
选择Python版本:主流版本有2.7和3.5(从3.5版本开始,不再支持Windows XP操作系统,Windows XP用户请安装3.4版本)。我们推荐使用未来趋势的3.5版本。
安装Python时,建议选择“Add exe to path”,这样会自动将Python程序添加到环境变量中。安装完成后,运行python -V检测版本。如果使用较旧的Python版本,需要手动安装setuptools和pip工具包。
安装Selenium的方法有两种:
pip install -U selenium(U表示升级)。python setup.py install命令安装。在Ubuntu下,Python通常已经预装好了。打开终端,输入python -V验证版本。如果没有安装,需要从Python官网下载指定版本的源文件进行源码安装,并设置环境变量。安装Selenium的方法与Windows环境下一致,推荐使用pip命令安装。
在完成环境搭建后,可以使用Python编写自动化脚本程序进行Selenium测试。在选择IDE时,可以参考以下几种工具:
通过Sublime Text 3安装Python环境:
Ctrl + Shift + P),输入install package。i,匹配到Anaconda插件,安装后可以用Ctrl + B编译和执行Python代码。from selenium import webdriver# 创建浏览器对象browser = webdriver.Firefox()# 打开百度网站browser.get('https://www.baidu.com/') from selenium import webdriverfrom selenium.webdriver.common.keys import Keys# 创建浏览器对象browser = webdriver.Firefox()# 导航到百度主页browser.get('https://www.baidu.com')# 检查标题assert '百度一下,你就知道' in browser.title# 找到名字为wd的元素element = browser.find_element_by_name('wd')# 搜索seleniumhqelement.send_keys('seleniumhq' + Keys.RETURN)# 关闭浏览器browser.quit() 3.0.1更新后,需要做以下两个操作:
错误提示:WebDriverException:Message:'geckodriver' executable needs to be in Path
解决方法:
C:\python34)。XAMPP是Windows操作系统下的开发环境套件,包含Apache、MySQL、PHP、Perl等工具。安装步骤:
ranzhi.2.5.zip),将文件夹放入xampp\htdocs目录。http://localhost/ranzhi/www完成网站部署。通过上述示例,我们可以编写简单的Selenium脚本,但为了测试工作,需要使用unittest框架进行“检查”。
unittest(最初名为PyUnit)是Python的标准单元测试框架,提供TestCase基类和多种断言方法。使用步骤:
unittest模组。unittest.TestCase。test_开头。import unittestclass DemoTests(unittest.TestCase): def setUp(self): self.driver = webdriver.Firefox() self.driver.implicitly_wait(30) self.driver.maximize_window() self.driver.get("https://www.jd.com/") def test_search_by_category(self): self.search_field = self.driver.find_element_by_id("key") self.search_field.clear() self.search_field.send_keys("iphone 6s plus" + Keys.RETURN) products = self.driver.find_elements_by_css_selector("li[class='gl-item']") self.assertEqual(len(products), 24) def tearDown(self): self.driver.quit()if __name__ == '__main__': unittest.main(verbosity=2) WebDriver提供多种定位方法,包括id、name、class name、tag、link text、partial link text、xpath、css selector等。
driver.maximize_window()driver.set_window_size(480, 800)driver.get(url)driver.back()、driver.forward()import unittestfrom selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditionsclass WebDriverTests(unittest.TestCase): @classmethod def setUpClass(cls): cls.driver = webdriver.Firefox() cls.driver.get('about:blank') cls.driver.implicitly_wait(30) print(" -- set up finished -- ") def test_01_navigate(self): urls = [ 'https://www.baidu.com/', 'http://pro.demo.zentao.net/user-login-Lw==.html' ] for url in urls: self.driver.get(url) self.driver.maximize_window() self.driver.implicitly_wait(30) if url == 'http://pro.demo.zentao.net/user-login-Lw==.html': self.driver.find_element_by_id('submit').click() WebDriverWait(self.driver, 10).until( expected_conditions.element_to_be_clickable((By.ID, "submit")) ) self.driver.implicitly_wait(30) print(f"-- test 01 finished -- ") def test_02_element_interaction(self): self.driver.get('http://pro.demo.zentao.net') self.account_field = self.driver.find_element_by_name('account') self.password_field = self.driver.find_element_by_name('password') self.account_field.clear() self.password_field.clear() self.driver.implicitly_wait(30) self.account_field.send_keys('demo') self.password_field.send_keys('123456') self.driver.find_element_by_id('submit').click() self.driver.implicitly_wait(30) companyname = self.driver.find_element_by_id('companyname') self.assertEqual('demo项目管理系统', companyname.text) print(companyname.get_attribute('type')) print("-- test 02 finished -- ") def test_03_element_interation2(self): js = 'selectTheme("green")' self.driver.execute_script(js) self.driver.implicitly_wait(30) js = 'selectTheme("red")' self.driver.execute_script(js) self.driver.implicitly_wait(30) js = 'selectTheme("lightblue")' self.driver.execute_script(js) self.driver.implicitly_wait(30) js = 'selectTheme("blackberry")' self.driver.execute_script(js) self.driver.implicitly_wait(30) self.driver.find_element_by_id('menuproduct').click() self.driver.implicitly_wait(30) self.driver.find_element_by_id('menuproject').click() self.driver.implicitly_wait(30) self.driver.find_element_by_id('menuqa').click() self.driver.implicitly_wait(30) self.driver.find_element_by_id('menudoc').click() self.driver.implicitly_wait(30) self.driver.find_element_by_id('menureport').click() self.driver.implicitly_wait(30) self.driver.find_element_by_id('menucompany').click() self.driver.implicitly_wait(30) self.driver.find_element_by_link_text('退出').click() self.driver.implicitly_wait(30) WebDriverWait(self.driver, 10).until( expected_conditions.element_to_be_clickable((By.ID, "submit")) ) print("-- test 03 finished -- ") def test_04_cookies(self): self.driver.add_cookie({'name': 'key-neeeeew', 'value': 'value-neeeewwwww'}) for cookie in self.driver.get_cookies(): print(f"{cookie['name']} -> {cookie['value']}") print() self.driver.delete_all_cookies() cookies = self.driver.get_cookies() print(cookies) print("-- test 04 finished -- ") @classmethod def tearDownClass(cls): cls.driver.quit() print("-- tear down finished -- ")if __name__ == '__main__': unittest.main(verbosity=2) 作者:立师兄Linty
链接:https://www.jianshu.com/p/3ce95cbc65be来源:简书简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。