1、chromedriver下载
http://npm.taobao.org/mirrors...
需要根据chrome当前版本(chrome://version/)下载对应的driver,下载好的driver放到你的python安装根目录中
下面的代码简单的实现一个在百度首页进行搜索的功能
from selenium import webdriver
import time
driver=webdriver.Chrome()
driver.get("http://www.baidu.com")
driver.find_element_by_id('kw').send_keys('mytest')
driver.find_element_by_id('su').submit()
time.sleep(20)
driver.close()
2、搜索元素
find_element_by_name方法返回第一个与name属性值匹配的元素
find_element_by_xpath 最通用的方法
3、unittest中的setUp和tearDown方法优化方案
setUp()和tearDown()方法为每个测试方法都创建了一个实例,并且在每个test__方法执行结束后都要关闭实例。这样会极大影响测试效率,如何让各个测试方法共用一个浏览器实例。
由于我测试的系统中,每个测试用例都会重新创建一个浏览器实例,每次都需要重复输入账号密码,我们使用setUpClass()方法和tearDownClass()方法及@classmethod标识来替换setUp和tearDown。这两个方法使我们可以在类级别来初始化数据,替代了方法级别的初始化,这样各个测试方法就可以共享这些初始化数据
@classmethod
def setUpClass(self):
self.driver = webdriver.Chrome()
self.driver.implicitly_wait(30)
self.driver.maximize_window()
self.driver.get("xxxxx")
self.driver.find_element_by_xpath('//*[@id="username"]').send_keys('xxxx')
self.driver.find_element_by_xpath('//*[@id="password-email"]').send_keys('xxxx')
self.driver.find_element_by_id('emailLogin').click()
@classmethod
def tearDownClass(self):
self.driver.quit()
4、如何运行多个测试测试用例集?
我们有两个测试用例集Mytest和Mytest1,需要加到一个测试套件中,需要使用TestSuite,TestLoader和TextTestRunner
from test import MyTest
from test1 import MyTest1
import unittest
mytest=unittest.TestLoader().loadTestsFromTestCase(MyTest)
mytest1=unittest.TestLoader().loadTestsFromTestCase(MyTest1)
smoketest=unittest.TestSuite([mytest,mytest1])
unittest.TextTestRunner(verbosity=2).run(smoketest)
5、如何生成好看的测试报告
原生的HtmlTestRunner生成的测试报告视觉上没有那么好看,那么我们如何生成好看的测试报告。可以搜索Wai Yip Tung
编写的HtmlTestRunner,可以看到生成的测试报告美观很多
6、如何处理下拉框?
对形如下文的下拉框,采取先定位下拉按钮点击,再定位所选的选项点击的形式。
<ul>
<li>option 1</li>
<li>option 2</li>
</ul>
7、如何在远程机器上进行测试
使用Selenium Standalone Server,下载地址https://www.selenium.dev/down... 注意要安装对应版本的jre,否则会出现报错unsupported major.minor version 52.0(52.0提示你需要安装jre1.8)
把chromedriver放到要控制的远程机器的python根目录下,在远程机器下运行以下命令后
`java -Dwebdriver.
chrome.driver="C:SeDriverschromedriver.exe" -jar sele
nium-server-standalone-2.41.0.jar`
在你本地的机器上添加如下代码即可开始远程测试
desired_caps = {}
desired_caps['platform'] = 'WINDOWS'
desired_caps['browserName'] = 'chrome'
self.driver = webdriver.Remote('http://远程ip+端口/wd/hub', desired_caps)
8、如何分布式运行你的测试,在多个不同浏览器+操作系统运行测试用例?
大致结构:
first:
首先选择一台机器A作为hub,运行命令
java -jar selenium-server-standalone-2.25.0.jar -role hub
这个过程中出现报错port 4444 is busy,执行以下命令查下是什么占用了4444端口(windows下),查出来是之前启动的standalone没结束,所以我们把它kill掉,重新启动就ok了。
netstat -ano|findstr "4444"
tasklist|findstr "4444的进程号"
taskkill /pid {7888} /F
second:
然后我们可以选择多个不同系统+浏览器作为结点
之前我们使用了A作为hub,A的实际系统为windows,那么我们可以在A上选择不同端口作为结点进行测试,选择B(MAC+firefox)作为另一个结点
java -Dwebdriver.chrome.driver="chromedriv
er.exe" -jar selenium-server-standalone.jar -role webdriver -browser
"browserName=chrome,version=83,maxinstance=2,platform=W
INDOWS" -hubHost 172.18.4.170 -port 5555
third:
hub和节点都配置完成后,我们在之前的本地机器local上添加如下代码
if __name__ == '__main__':
if len(sys.argv) > 1:
SearchProducts.BROWSER = sys.argv.pop()
SearchProducts.PLATFORM = sys.argv.pop()
unittest.main()
就可以实现在命令行选择对应的操作系统和浏览器结点运行测试用例
python 你的自动化代码.py WINDOWS chrome
当然我们也可以使用云环境作为我们的测试hub和结点:Sauce Labs和BrowserStack
9、如何在移动端使用selenium
ios和android:如果希望在iPhone或者iPad上运行iOS测试,那么就需要在装有Mac OS X系统的机器上安装Appium。如果是测试Android应用程序,需要在装有Windows或者Linux系统的机器上安装Appium。
ios执行过程:
由于我这边没有mac的机器,暂不进行测试操作
android执行过程
Appium对于Android应用程序的测试是通过调用内
置在Android SDK中的 UI Automator来实现的。过程非
常类似于基于iOS平台的测试。
Appium 作为一个HTTP Server来接收测试脚本通过
JSON Wire Protocol传输过来的指令。Appium发送这些
指令给UI Automator。这样,这些指令就可以在启动了
被测应用的模拟器或者真机上执行测试。这个过程中,
Appium把JSON指令翻译成UI Automator 能够理解的
Java命令。这个过程如下图所示。
参考链接:https://www.cnblogs.com/smyy/...
android sdk下载地址:http://www.androiddevtools.cn/
pip install Appium-Python-Client
appium下载地址:https://bitbucket.org/appium/appium.app/downloads/16
持续学习与更新中......
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。