web自动化测试—selenium2实操常见问题

1、关于webdriver不支持python3.x,导致文件不存在问题:
需下载geckodriver到firefox,并添加其安装目录到path,并且firefox最好是最新版。

2、AttributeError: ‘list’ object has no attribute 'click’
参考Selenium2+python自动化45-18种定位方法(find_elements)
参考
Python+Selenium定位不到元素常见原因及解决办法(报:NoSuchElementException)

解决Selenium弹出新页面无法定位元素问题(Unable to locate element)
此时考试driver.find_element_by…中的element是否为复数elements;
无法定位,找不到该当地元素local element,查看是否还有嵌层,即还有功能栏,最好先定位功能栏的元素项(笨方法);
多表单切换(iframe 内部元素定位)

3、元素is not reachable by keyboard:
指该元素不能输入,一般在下一级

4、Selenium如何处理动态id定位元素
selenium定位动态id元素
考虑模糊定位contains(@id,…)
selenium 多表单切换处理(iframe/frame)

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from time import ctime
import os, time

driver = webdriver.Firefox()
driver.get("http://mail.10086.cn/")

#输入登录账户密码
driver.find_element_by_id("txtUser").send_keys("18820077485")
driver.find_element_by_id("txtPass").send_keys("qwe123qwe")
driver.find_element_by_id("loginBtn").click()

#写信
driver.implicitly_wait(10)
driver.find_element_by_id("toptab_mailbox").click()
driver.find_element_by_id("btn_compose").click()
driver.implicitly_wait(5)
xf = driver.find_element_by_xpath('//*[contains(@id,"compose_0.")]')
driver.switch_to.frame(xf)

#填写收件人
rrote = '/html/body/div[1]/div/div[2]/div/table/tbody/tr[1]/td/div/div/div/div[2]/div[@class="addrText"]/input'
rnumber = ['[email protected]','[email protected]']
for r in rnumber:
	driver.find_element_by_xpath(rrote).send_keys(r)
	driver.find_element_by_xpath(rrote).send_keys(',')

#driver.find_element_by_xpath("/html/body/div[1]/div/div[2]/div/table/tbody/tr[1]/td/div/div/div/div[2]/div[2]/input").send_keys("[email protected],[email protected]")
#driver.find_element_by_id("toContainer").send_keys{"[email protected]","[email protected]"}

#填写抄送人
crote = '/html/body/div[1]/div/div[2]/div/table/tbody/tr[2]/td/div/div/div/div[2]/div[@class="addrText"]/input'
cnumber = ['[email protected]','[email protected]']
for c in cnumber:
	driver.find_element_by_xpath(crote).send_keys(c)
	driver.find_element_by_xpath(crote).send_keys(',') #注意cookies影响

5、selenium之 文件上传所有方法整理总结
参考文件上传所有方法整理总结

6、下拉框元素定位问题
参考selenium-Python之定位下拉框选择
下拉框元素定位
定位下拉框
select、div布局、id考虑select、xpath、分步定位
特殊(下拉框隐藏且无对应id):采用文本类型定位
在这里插入图片描述

#添加主题
driver.find_element_by_id("txtSubject").send_keys("邮箱登录测试")

#选择主题字体色彩
driver.find_element_by_id("subjectColorSelector").click()
item = driver.find_element_by_css_selector("#subjectColor > ul:nth-child(1)")
li = item.find_elements_by_tag_name('li')
li[2].click()

7、文件上传及frame图片动态定位
python+webdriver+autoit实现百度云盘文件上传
Selenium2+python自动化33-文件上传(send_keys)
selenium自动化之操作浏览器上传文件

8、选择器的使用
CssSelector常用定位方式总结

9、发现网页布局嵌套了frame,但是操作frame中的按钮,弹出的窗口定位于frame之外
参考:跳出frame,重新定位frame

10、selenium之 富文本框和editor编辑器的处理

请参考[elenium之 富文本框和editor编辑器的处理](https://blog.csdn.net/huilan_same/article/details/52386274)

在群里经常会遇到有人问文本框的处理,今天有时间,便写一点这方面的经验。
一般输入框有三种:

1.短的input框,如下:

在这里插入图片描述

<input id="zenInput2" class="zenInputDemo" type="text" style="position: static;">

2.textarea框,如下:
在这里插入图片描述

<textarea id="message1" name="message1"></textarea>

3.div式的editor框,如下:
在这里插入图片描述
代码见网页源码

4.也可能是更复杂的iframe的editor,如下:
在这里插入图片描述
代码见网页源码
下面依次看看这几种输入框该怎么解决:

1.input
其实这个只是列在这里,input该如何处理,我想懂点selenium的都知道怎么办。

2.textarea
很简单,定位到元素,直接send_keys就行。

示例网址:http://www.sucaijiayuan.com/api/demo.php?url=/demo/20150325-1
代码:
# -*- coding: utf-8 -*-
from selenium import webdriver
from time import sleep
driver = webdriver.Firefox()
driver.get('http://www.sucaijiayuan.com/api/demo.php?url=/demo/20150325-1')
driver.maximize_window()
driver.switch_to.frame('iframe')
driver.find_element_by_id('message1').send_keys('Hello world!')  # 很简单,直接send_keys就行
sleep(2)
print driver.find_element_by_id('message1').get_attribute('value')
driver.quit()

结果:
Hello world!

3.div式的editor
这种一样,定位到元素div,直接send_keys就行,不过这个send_keys不是到了‘value’属性中,而是在text中。

示例网址:http://www.sucaijiayuan.com/api/demo.php?url=/demo/基于bootstrap的轻量级jQuery文本编辑器插件 LineControl/index.html

# -*- coding: utf-8 -*-
from selenium import webdriver
from time import sleep
driver = webdriver.Firefox()
driver.get('http://www.sucaijiayuan.com/api/demo.php?url=/demo/%E5%9F%BA%E4%BA%8Ebootstrap%E7%9A%84%E8%BD%BB%E9%87%8F%E7%BA%A7jQuery%E6%96%87%E6%9C%AC%E7%BC%96%E8%BE%91%E5%99%A8%E6%8F%92%E4%BB%B6%20LineControl/index.html')
driver.maximize_window()
driver.switch_to.frame('iframe')
driver.find_element_by_class_name('Editor-editor').send_keys('Hello world again!')  # 没什么区别,也是直接send_keys
sleep(2)
print driver.find_element_by_class_name('Editor-editor').text
driver.quit()

结果:
Hello world again!

4.iframe中的editor
这种是最复杂的一种,但要搞明白了,其实也很简单。
示例网址:http://ueditor.baidu.com/website/examples/completeDemo.html

代码:

# -*- coding: utf-8 -*-
from selenium import webdriver
driver = webdriver.Chrome(executable_path='D:\py\AutoTestFramework\drivers\chromedriver.exe')
driver.get('http://ueditor.baidu.com/website/examples/completeDemo.html')
driver.switch_to.frame('ueditor_0')  # 注意,这种editor一定有frame,一定要切frame
body_string = """Hello world again again!
Hello world again again!
Hello world again again!
Hello world again again!"""

driver.find_element_by_tag_name('body').send_keys(body_string)  # 直接往frame里的body里填内容,是不是很简单粗暴
print driver.find_element_by_tag_name('body').text
driver.quit()

结果:
Hello world again again!

其实frame editor的内容一般都是写在里面的body里,最重要的就是切到frame中去,关于frame的定位于switch,见我的博客:
selenium之 定位以及切换frame(iframe)

frame中一般是一个空的html,其中显示的内容即是body中的内容。

13、selenium ide录制的百度搜索脚本
可参考python+unittest单元测试框架

猜你喜欢

转载自blog.csdn.net/qq_22820783/article/details/84023830
今日推荐