python变量:path : c:\python 可以把浏览器驱动放在c:\python目录下
打包成可执行的EXE文件:pyinstaller -w --onefile selenium1.py
selenium安装:Python setup.py install
cmd运行:Python -m unittest 脚本.py
查看Python安装地址:cmd-->where python
python输入IP变成超链接,将光标移到到冒号前面
注意事项: :
//*[@id="queryLeftTable"]//td[4][@class]/../td[1]//a
双//相对路径 /..返回上层路径
注意事项:
1.elements后面要加s(多元素) 2."queryLeftTable" 中"符号别错了
2.动态变化的元素,使用xpath模糊查询://*[contains(text(),"GC-高铁/城际")]
//*[@id="_ul_station_train_code"]/li[1]/label
自己写一个弹窗: driver.execute_script("window.alert('这是一个alert弹框。');")
元素带none,不可见时: js = "document.getElementsByClassName(hhidden)[0].style.display='block';"
driver.execute_script(js)
使用JS删除元素: document.getElementsByClassName("site-nav-right fr")[0].childNodes[1].removeAttribute("target")
driver.execute_script(js)
时间日期控件的处理:
①带readonly属性的使用JS去除属性,然后添加时间
js = 'document.getElementById("train_date").removeAttribute("readonly");'
drive.execute_script(js)
js_value = 'document.getElementById("train_date").value="2019-11-10"'
drive.execute_script(js_value)
②不带readonly属性,可以手动写的使用send_keys()
note:
浏览器操作:
driver.maximize_window()
driver.set_window_size(480, 800)
driver.back()
driver.forward()
driver.quit()
定位元素:
find_element_by_id()
find_element_by_name()
find_element_by_class_name()
find_element_by_tag_name()
find_element_by_link_text()
find_element_by_partial_link_text()
find_element_by_xpath()
find_element_by_css_selector()
操作测试对象:
clear()
send_keys()
click()
submit()
size
text
get_attribute(name)
is_displayed()
鼠标事件: from selenium.webdriver.common.action_chains import ActionChains
context_click()
double_click()
drag_and_drop()
move_to_element()
click_and_hold()
键盘事件: send_keys(Keys.BACK_SPACE)
send_keys(Keys.SPACE)
send_keys(Keys.CONTROL,'a')
send_keys(Keys.CONTROL,'x')
send_keys(Keys.CONTROL,'v')
send_keys(Keys.ENTER)
send_keys(Keys.TAB)
send_keys(Keys.ESCAPE)
打印:
driver.title
driver.current_url
设置等待时间:
sleep()
WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
定位一组对象:
eg: checkboxes = driver.find_elements_by_css_selector('input[type=checkbox]')
for checkbox in checkboxes:
checkbox.click()
checkboxes = driver.find_elements_by_css_selector('input[type=checkbox]').pop().click()
多窗口:
driver.current_window_handle
driver.window_handles
driver.switch_to_window(nowhandle)
driver.close()
判断:
for handle in allhandles:
if handle != nowhandle:
driver.switch_to_window(handle)
print 'now register window!'
alert/confirm/prompt 处理:
text 返回 alert/confirm/prompt 中的文字信息。
accept 点击确认按钮。
dismiss 点击取消按钮,如果有的话。
send_keys 输入值,这个 alert\confirm 没有对话框就不能用了,不然会报错
driver.switch_to_alert()
文件上传:
send_keys('D:\\selenium_use_case\upload_file.txt')
文件下载:
browser.download.dir
os.getcwd()
application/octet-stream
滚动条:
js="var q=document.documentElement.scrollTop=10000"
driver.execute_script(js)
js_="var q=document.documentElement.scrollTop=0"
driver.execute_script(js_)
target_elem = driver.find_element_by_link_text("地区")
driver.execute_script("return arguments[0].scrollIntoView();",target_elem)
cookie:
driver.get_cookies()
delete_cookie("CookieName")
driver.delete_all_cookies()
driver.add_cookie({'name':'key-aaaaaaa', 'value':'value-bbbb'})
遍历cookie:
for cookie in driver.get_cookies():
print "%s -> %s" % (cookie['name'], cookie['value'])
循环执行参数化:
values=['selenium','webdriver',u'虫师']
for serch in values:
driver = webdriver.Firefox()
driver.get("http://www.xxxx.com")
driver.find_element_by_id("kw").send_keys(serch)
② 多个字段可以建造多个文本
source = open("D:\\abc\\data.txt", "r")
values = source.readlines()
source.close()
③ 读取CSV文件
import csv
my_file='D:\\selenium_python\\data\\userinfo.csv'
data=csv.reader(file(my_file,'rb'))
错误截图: 找不到元素报错截图
browser.get_screenshot_as_file("/home/fnngj/python/error_png.png")
eg:
try:
browser.find_element_by_id("kwsss").send_keys("selenium")
browser.find_element_by_id("su").click()
except:
browser.get_screenshot_as_file("/home/fnngj/python/error_png.png")
browser.quit()
将对象拖拽到目标地点:
A = driver.find_element_by_id('u')
B = driver.find_element_by_id('p')
ActionChains(driver).drag_and_drop(A,B).perform()
滑块拖拽:
ActionChains(driver).drag_and_drop_by_offset(A,300,0).perform()
切入到无id,无name的iframe框架中:
定位到frame元素,切换进去
iframe=driver.find_element_by_xpath('//*[@id="bjui-navtab"]/div[3]/div/iframe')
driver.switch_to_frame(iframe)