1、去掉chrome证书提示
from selenium import webdriver
options=webdriver.ChromeOptions()
# 去掉证书问题
options.add_experimental_option('excludeSwitches',["ignore-certificate-errors"])
# 使用测试类型
options.add_argument("test-type")
# 加载用户配置
option.add_argument("--user-data-dir=C:UsersAdministratorAppDataLocalGoogleChromeUser Data")
driver=webdriver.Chrome(chrome_options=option)
driver.get("http://www.baidu.com")
2.获取隐藏文本 style='display:none' 属性的文本
textContent
和innerText
只会得到文本内容,而不会包含 HTML 标签。textContent
是 W3C 兼容的文字内容属性,但是 IE 不支持innerText
不是 W3C DOM 的指定内容,FireFox不支持- innnerHTML 获取相关的html语言
driver.find_element_by_xpath(").get_attribute("textContent") #只会获取文本
3.定位<input><span>取消</span></input>,已经不是input标签了
使用 Actionchains定位
4.关闭窗口,验证关闭成功,可以用
try: except: 来捕捉Exception
这里需要注意的是except中有个错误
except Exception as e:
# except:
print(i,e)
driver.switch_to_alert().accept()
main_enter(name)
你想把except输出没有问题,下面的alert框正常accept,但是如果你想在每次识别的结果i,自加一,那么alert就会失败
except Exception as e:
# except:
print(i,e)
i+=1
driver.switch_to_alert().accept()
main_enter(name)
我试了i+=1在其他地方写,同样会except失败,所以,没有写i
5.unittest框架中,alltest使用
import unittest
# import testsuites
from src.Logging_Method import LoggingMethod
from src.test_Login_Interface import testLoginInterface
from src.test_main_Interface import testMainInterface
from src.test_Left_Menu import testLeftMenu
from src.test_Data_Analysis import testDataAnalysis
# from unittest.test import test_case
LoggingMethod().header()
def all_case():
# case_dir = "D:\\Eclipse_workspances\\JEEworkspace\\AutoTestingDialoguePortal\\src"
# testcase = unittest.TestSuite()
# discover = unittest.defaultTestLoader.discover(case_dir, pattern="test*.py", top_level_dir=None)
# for test_suite in discover:
# for test_case in test_suite:
# testcase.addTest(test_case)
# print testcase
# return testcase
suite = unittest.TestSuite()
suite.addTest(testLoginInterface()) #这种方法可以让所有的测试用例在这个类中运行
suite.addTest(testMainInterface())
suite.addTest(testLeftMenu())
suite.addTest(testDataAnalysis)
return suite
if __name__ == "__main__":
runner = unittest.TextTestRunner()
runner.run(all_case())
LoggingMethod().end()
suite.addTest(testLoginInterface()) #这种方法可以让所有的测试用例在这个类中运行
suite.addTest(testMainInterface())
suite.addTest(testLeftMenu())
suite.addTest(testDataAnalysis)
return suite
if __name__ == "__main__":
runner = unittest.TextTestRunner()
runner.run(all_case())
LoggingMethod().end()
6.当你一个元素感觉总是明明对的但是定位不到,可能这个元素在iframe中
当iframe有id或者name的时候,使用switch
driver.switch_to_frame("iframe_main")#iframe_main为其name或者id
driver.find_element_by_xpath("/html/body/input").click()#iframe级别下的路径
当iframe没有name或者id,则使用xpath定位,编辑完成之后记得跳回默认内容,然后继续操作
//跳出frame,进入default content;重新定位id="id1"的div
dr.switchTo().defaultContent();
dr.findElement(By.id("id1"))
7.[0829/092047 :ERROR:ipc_channel_win.cc(217)]pipe error: 109
此种情况,可能是你的文件放在桌面,然后还有文件输出,就会报出pipe error错误,
解决办法:只用新建一个文件夹,把脚本放在文件夹中,然后运行就行了
8、UnicodeDecodeError: 'ascii' codec can't decode byte 0xb0 in position 1
解决方法:
打开D:\Python27\Lib下的 mimetypes.py 文件,找到大概256行:‘default_encoding = sys.getdefaultencoding()’
在这行前面添加三行:
if sys.getdefaultencoding() != 'gbk':
reload(sys)
sys.setdefaultencoding('gbk')
default_encoding = sys.getdefaultencoding()
9、将python脚本的控制台日志输出到一个log文件中
@echo off
D:
start python D:\script\svn_backup.py > log.txt
exit
log_format = '%(filename)s [%(asctime)s] [%(levelname)s] %(message)s'
#这条是定义日志格式的一个变量。显示的条目可以是以下内容:
%(levelname):日志级别的名字格式
%(levelno)s:日志级别的数字表示
%(name)s:日志名字
%(funcName)s:函数名字
%(asctime):日志时间,可以使用datefmt去定义时间格式,如上图。
%(pathname):脚本的绝对路径
%(filename):脚本的名字
%(module):模块的名字
%(thread):thread id
%(threadName):线程的名字
logging.basicConfig(format=log_format,datefmt='%Y-%m-%d %H:%M:%S %p',level=logging.DEBUG) #设置日志输出格式和级别。
logging.DEBUG,logging.INFO,logging.WARNING,logging.ERROR,logging.CRITICAL分别代表着那五中日志级别。
10、decode()与encode()
decode 的作用是将其他编码的字符串转换成 Unicode 编码,eg name.decode(“GB2312”),表示将GB2312编码的字符串name转换成Unicode编码。
encode 的作用是将Unicode编码转换成其他编码的字符串,eg name.encode(”GB2312“),表示将GB2312编码的字符串name转换成GB2312编码。
11、自动化页面之间的焦点切换:
for handle in driver.window_handles: #handle为固定变量
brow.switch_to_window(handle)
if brow.current_url==url:
break
12.ImportError: cannot import name InvalidArgumentException
出现这个错误,表明,你的selenium版本太低了,和appiumclient版本不匹配,更新版本就行
13、ValueError: Attempted relative import in non-package
出现这个是你的编辑器配置文件出错了,删掉编辑器的配置,或者重新建立项目、文件夹等,将脚本拷进去
14、Logcat capture failed: spawn ENOENT
sdk路径中有空格所致
15、A new session could not be created.
appium程序中设置里面勾选 override existing session
16、_mysql.c(42) : fatal error C1083: Cannot open include file: 'config-win.h':问题的解决
1.在http://www.lfd.uci.edu/~gohlke/pythonlibs/#mysql-python下载对应的包版本
64位2.7版本的python,就下载
MySQL_python-1.2.5-cp27-none-win_amd64.whl
然后在命令行执行pip install MySQL_python-1.2.5-cp27-none-win_amd64.whl
当然需要在cmd下跳转到下载MySQL_python-1.2.5-cp27-none-win_amd64.whl的目录下
然后就安装成功了MySQL-python
17、Raw_input 去中文
httpURL=raw_input().decode(sys.stdin.encoding).encode('utf-8')
httpURL=str(httpURL).replace('http://','').replace(':',':').replace('','').replace('','')