selenium使用遇到的问题

 

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' 属性的文本

 

 

  • textContentinnerText 只会得到文本内容,而不会包含 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('','')

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值