robotframework + selenium自动化测试常见的问题
Posted 程序员二黑.
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了robotframework + selenium自动化测试常见的问题相关的知识,希望对你有一定的参考价值。
1、 插入中文数据提示
FAIL UnicodeEncodeError: ‘latin-1’ codec can’t encode characters in position 92-107: ordinal not in range(25
DataBaseLibrary插入中文乱码的解决:修改D:\\Python27\\Lib\\site-packages\\DatabaseLibrary\\connection_manager.py里的connect_to_database函数,self._dbconnection = db_api_2.connect (db=dbName, user=dbUsername, passwd=dbPassword, host=dbHost, port=dbPort, charset=“utf8”),增加charset设定
2、调用mysql出现问题
ImportError: DLL load failed: \\xd5\\xd2\\xb2\\xbb\\xb5\\xbd\\xd6\\xb8\\xb6\\xa8\\xb5\\xc4\\xc4\\xa3\\xbf\\xe9\\xa1\\xa3
安装mysql-pythonMySQL_python-1.2.5-cp27-none-win_amd64.whl,打开cmd窗口,执行pip install MySQL_python-1.2.5-cp27-none-win_amd64.whl
3、调用cx_Oracle,报错
ImportError: DLL load failed: \\xd5\\xd2\\xb2\\xbb\\xb5\\xbd\\xd6\\xb8\\xb6\\xa8\\xb5\\xc4\\xc4\\xa3\\xbf\\xe9\\xa1\\xa3
解决:RobotFramework在安装cx_Oracle后,如果直接连接Oracle数据库时,会出现“Dll load failed”错误。因为Python在使用cx_Oracle类库访问oracle需要oci接口。当cx_Oracle 找不到需要的oci的dll的时候就会报这个错误。
解决方法可以从oracle的客户端找3个dll文件拷贝到cx_Oracle的安装目录D:\\Python25\\Lib\\site-packages
oraociei11.dll
oraocci11.dll
oci.dll
资源访问路径: http://download.csdn.NET/download/benq0124/7094561
还是报错
ImportError: DLL load failed: %1 \\xb2\\xbb\\xca\\xc7\\xd3\\xd0\\xd0\\xa7\\xb5\\xc4 Win32 \\xd3\\xa6\\xd3\\xc3\\xb3\\xcc\\xd0\\xf2\\xa1\\xa3
原因:oci.dll的版本一定要和cx_Oracle模块的版本一致,不一定要和实际的Oracle的数据版本一致。
例如:cx_Oracle版本是:10g的,那么oci.dll 也必须是10g的,至于实际连接的数据库版本,只要版本比10g低就可以了,例如9i。
解决:网上找oci.dll 64位相对应版本的,拷贝到cx_Oracle的安装目录D:\\Python27\\Lib\\site-packages
4、用rf运行IEdriver的速度好慢,比如在输入框输入用户名,一秒输入一个字符。你们的是不是这样子的?。如果是chromedriver就很快
解决办法:把IEDriver从64位换成32位
5、Firefox启动不起来,或者是启动了,页面是空白的,URL地址栏是空的
解决办法:可能是Firefox版本过高,碰到此问题请降低Firefox版本,最好是45.0版本以下
6、怎么制定robotframework的日志路径?
解决办法:在run的arguments输入-d D:\\Python27\\RobotFrameWork\\Result
7、robotframework的case跑完后,“Report”和“Log”按钮是灰色的,点击不了
解决办法:启动任务管理器(ctrl+alt+del),IE的进程,找IEDriverServer.exe结束掉,如果是chrome,就找到chromeDriverServer.exe。
8、数据备份
-
通过excel对数据库进行数据备份
通过执行以下语句插入excel数据备份表(针对MySQL)
LOAD DATA LOCAL INFILE “C:/Users/PC/Desktop/t_baike_word_value.csv” 所要插入数据的绝对路径
INTO TABLE
t_baike_word_value
所要插入数据的表CHARACTER SET utf8 设置编码格式
FIELDS TERMINATED BY "\\t"
TERMINATED BY “,”
OPTIONALLY ENCLOSED BY ‘"’
ESCAPED BY ‘\\’
LINES TERMINATED BY “\\r\\n”
-
直接对数据库进行操作
MySQL user_center user_center user_center
Oracle p95100 l234123 orcl
9、元素定位
1)元素定位的方法:findElement() 与 findElements()
a、findElement() 该方法返回基于指定查询条件的webElement对象,或抛出不符合条件的异常 eg:driver.findElement(By.id(“userID”));
b、findElements() 该方法返回指定查询条件的WebElement的对象集合,或返回null
2)WebElement对象提供的各种定位元素策略
ID:driver.findElement(By.id())
Name:driver.findElement(By.name())
className:driver.findElement(By.className())
tagName:driver.findElement(By.tagName())
linkText:driver.findElement(By.linkText())
partialLinkText:driver.findElement(By.partialLinkText())
css:driver.findElement(By.cssSelector())
xpath:driver.findElement(By.xpath())
3)webelement类提供了诸多方法
在我们开发脚本过程中如何选择最可靠,效率最高的方法,使用id,name是首选,因为他们在html标签中是唯一的,所以是最可靠的
ID定位:driver.findElement(By.id(“username”))
name定位:driver.findElement(By.name(“username”))
class定位:driver.findElement(By.className(“username”))
多学一招:WebElement类支持查询子类元素,如果页面中存在重复元素,但在不同div中,我们可以先定位到其父元素,然后定位其子元素,方法如下:
WebElement hello = driver.findElement(By.id(“div1”)).findElement(By.lindText(“hello”));
4)使用WebElements定位多个相似的元素
比如页面中存在五个单选按钮,他们有相同的class属性,值为:myRadio,我们想对五个按钮循环操作,我们可以把它们全部取出来放到集合中,然后做循环操作,如下:
List radios = driver.findElements(By.className(“myRadio”));
for(int i = 0;i<radios.size();i++)
radios.get(i).click();
其他定位方法与操作id,name类似,这里不再赘述,接下来我着重对css选择器与Xpath描述下
5)WebDriver 的By类中提供了cssSelector()方法,该方法使用有以下几种形式:
a、使用相对路径定位元素
如,我们要定为DOM中的input元素,我们可以这样操作,不考虑其在DOM中的位置,但这样做存在一定弊端,当DOM中存在多个input元素时,该方法总返回DOM中的 第一个元素,这并不是我们所期待的
eg:WebElement username = driver.findElement(By.cssSelector(“input”));
另外,为了使用这种方法更准确的定位元素,我们可以结合该元素的其他属性来实现精确定位的目的
b、结合id来定位,driver.findElement(By.cssSelector(“input#username”)); 在标签与id之间使用#连接,如果对css了解的朋友一看就知道为什么会这样写了,不了解也没关 系,只要记住这种写法就OK了
另外该方法也可简写为driver.findElement(By.cssSelector(“#username”)); 有点儿类似于id选择器
c、使用元素的任何属性来定位元素
driver.findElement(By.cssSelector(“标签名[属性名=‘属性值’]”));
d、匹配部分属性值
^= driver.findElement(By.cssSelector(“标签名[属性名^=‘xxx’]”)); 匹配属性值以xxx开头的元素
=
d
r
i
v
e
r
.
f
i
n
d
E
l
e
m
e
n
t
(
B
y
.
c
s
s
S
e
l
e
c
t
o
r
(
"
标签名
[
属性名
= driver.findElement(By.cssSelector("标签名[属性名
=driver.findElement(By.cssSelector("标签名[属性名=‘xxx’]“)); 匹配属性值以xxx结尾的元素
= driver.findElement(By.cssSelector(“标签名[属性名^=‘xxx’]”)); 匹配属性值包含xxx的元素
6)使用相对+绝对路径方法
这里是我自己定义的方法,方便记忆,的确也是这样来实现的
driver.findElement(By.cssSelector(“div#login>input”)) 该方法中“div#login>input” 首先通过相对路径定位到id为login的div元素,然后查找其子元素input(绝对路径)
7)使用xpath定位元素
相比cssSelector,xpath是我比较常用的一种定位元素的方式,因为它很方便,缺点是,消耗系统性能
a、使用绝对路径定位元素
driver.findElement(By.xpath(“/html/body/div/form/input”))
b、使用相对路径定位元素
driver.findElement(By.xpath(“//input”)) 返回查找到的第一个符合条件的元素
c、使用索引定位元素,索引的初始值为1,注意与数组等区分开
driver.findElement(By.xpath(“//input[2]”)) 返回查找到的第二个符合条件的元素
d、结合属性值来定位元素
driver.findElement(By.xpath(“//input[@id=‘username’]”));
driver.findElement(By.xpath(“//img[@alt=‘flowr’]”));
e、使用逻辑运算符,结合属性值定位元素,and与or
driver.findElement(By.xpath(“//input[@id=‘username’ and @name=‘userID’]”));
f、使用属性名来定位元素
driver.findElement(By.xpath(“//input[@button]”))
g、类似于cssSlector,使用部分属性值匹配元素
starts-with() driver.findElement(By.xpath(“//input[stars-with(@id,‘user’)]”))
ends-with driver.findElement(By.xpath(“//input[ends-with(@id,‘name’)]”))
contains() driver.findElement(By.xpath(“//input[contains(@id,“ernam”)]”))
8)使用任意属性值匹配元素
driver.findElement(By.xpath("//input[@=‘username’]”))
9)使用innerText定位元素
a、使用cssSelector查找innerText定位元素
driver.findElement(By.cssSelector(“span[textContent=‘新闻’]”));
b、使用xpath的text函数
driver.findElement(By.xpath(“//span[contains(text(),‘hello’)]”)) 包含匹配
driver.findElement(By.xpath(“//span[text()=‘新闻’]”)) 绝对匹配
10、jenkins集成执行
1)首先需要申请一台远程测试机;
2)然后在jenkins新建一个节点
3)然后在该节点下面新建测试工程
4)配置项目
命令执行:pybot -i P1 -l log.html -r report.html -o output.xml C:\\jenkins\\workspace\\Sunny_Web
最后:下方这份完整的软件测试视频学习教程已经整理上传完成,朋友们如果需要可以自行免费领取 【保证100%免费】
以上是关于robotframework + selenium自动化测试常见的问题的主要内容,如果未能解决你的问题,请参考以下文章
python-selenium-robotframework安装问题
robotframework+python3+selenium之常用情景---第四集
RobotFramework+Selenium2环境搭建与入门实例
robotframework+selenium2library如何解决界面元素无法点击的问题
Robotframework-selenium-Edgebrowser - 'options' 对象没有属性 'use_chromium'