selenium+python:脚本学习笔记(二)

来源:互联网 发布:方舟生存进化优化太差 编辑:程序博客网 时间:2024/05/16 06:16

自己写了一部分,也包含一些从其它文章里的摘录汇总,供自己后续学习备忘之用


 
 
  • 键盘输入
from selenium.webdriver.common.keys import Keys
driver.find_element_by_id("MainContent_txtDUNSNr").send_keys("邓氏码输入test")
清除输入-方式1
driver.find_element_by_id("MainContent_TextBox1").clear()
#清除输入--方式2
driver.find_element_by_id("MainContent_TextBox1").send_keys(Keys.CONTROL,'a')
driver.find_element_by_id("MainContent_TextBox1").send_keys(Keys.DELETE)
 
  • 获取元素自带的text内容
self.driver.find_element_by_id("lastTimeDiv").text
获取input的文本值
方法一:获取input的文本值
driver.find_element_by_id("MainContent_TextBox1").getText()
方法二:获取input中value的值
driver.find_element_by_id("MainContent_TextBox1").getAttribute("value") 
 
  • alert弹出框处理
sleep(3)                    #是等待元素加载的
alert = driver.switch_to_alert()
sleep(1)                   #程序执行到这的时候,ALERT是模式对话框 ,可能ALERT没加载上,需要加载时长
alert.accept()  
 
  • 模拟鼠标键盘操作

http://blog.csdn.net/df0128/article/details/45536573

 
  • 启动本地跟默认浏览器
import os
profileDir = "C:Users\\Administrator\\AppData\\Roaming\\Mozilla\\Firefox\\Profiles\\xe5qiy45.default"
profile = webdriver.FirefoxProfile(profileDir)
self.driver = webdriver.Firefox(profile)
详见
https://www.cnblogs.com/Jeff-cui/p/4940410.html
https://www.cnblogs.com/puresoul/p/4251536.html
  • 窗口切换
# 获取打开的多个窗口句柄
windows = driver.window_handles
# 切换到当前最新打开的窗口
driver.switch_to.window(windows[-1])
self.driver.switch_to.window(handles[0])切换到第一个打开的窗口
self.driver.switch_to.window(handles[1])切换到第二个打开的窗口
# 获得打开的第一个窗口句柄
window_1 = driver.current_window_handle
# 获得打开的所有的窗口句柄
windows = driver.window_handles
# 切换到最新的窗口
for current_window in windows:
    if current_window != window_1:

        driver.switch_to.window(current_window)

from selenium import webdriver

from selenium.webdriver.common.keys import Keys

from selenium.webdriver.common.action_chains import ActionChains

#新建标签页

ActionChains(browser).key_down(Keys.CONTROL).send_keys("t").key_up(Keys.CONTROL).perform()

# 关闭标签页

ActionChains(browser).key_down(Keys.CONTROL).send_keys("w").key_up(Keys.CONTROL).perform()

4.标签页切换

from selenium import webdriver
browser=webdriver.Firefox()

browser.get('xxxxx')

# 获取当前窗口句柄(窗口A)

handle = browser.current_window_handle

# 打开一个新的窗口

browser.find_element_by_id('xx').click()

# 获取当前所有窗口句柄(窗口A、B)

handles = browser.window_handles

# 对窗口进行遍历

for newhandle in handles:

    # 筛选新打开的窗口B

    if newhandle!=handle:

# 切换到新打开的窗口B

browser.switch_to_window(newhandle)

break #跳出循环

# 在新打开的窗口B中操作

browser.find_element_by_id('xx').click()

# 关闭当前窗口B

browser.close()

#切换回窗口A

browser.switch_to_window(handles[0]) 

http://www.361way.com/python-selenium-switch-windows-tabs/5184.html

http://blog.csdn.net/real_tino/article/details/56521757

  • 控制窗口打开方式(tab或新页面) 

switch_to_window该方法是Webdriver中内置的一个方法,除了在多个浏览器中作切换用,单个浏览器多个标签(Tab)之间的切换也可以用这个方法,思路就是先取得所有标签的句柄,然后循环遍历并判断是否是当前标签页,如果不是则切换

target=_blank意思是在新窗口中打开被链接文档(引自w3school),通俗点解释就是超链接会用过新窗口(新标签)打开,那么将其值清除便可实现点击该超链接后不会另起一个新标签页。利用Document 对象方法查找该id然后将其target的值清除:

js = 'document.getElementById("setf").target="";'
driver = webdriver.Firefox()driver.get("http://www.baidu.com")js = 'document.getElementById("setf").target="";'driver.execute_script(js)driver.find_element_by_id("setf").click()driver.find_element_by_link_text("百度首页").click()
  • 处理模态窗口的方法

主要思想: 使用Java Robot模拟键盘的回车 来替代 selenium的click操作.

1, 以如下的站点为例:https://developer.mozilla.org/samples/domref/showModalDialog.html

2, 当点击open a model dialog 按钮时, 会弹出模态窗口, 此时 按照通常的做法 便是使用 click操作,然后再switch to 弹出的窗口。 这样是行不通的, 因为click 那个button后 ,code被挂起了,这时候要等用户操作模态窗口完毕 才会继续执行下面的code。

3, 解决办法: 先使用sendkeys("") 定位到要点击的button上面,然后使用java robot类来模拟点击键盘的回车键, 如下:
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_ENTER);
Thread.sleep(500); //这里最好是等一下 时间根据实际情况来

然后就可以照常的去 getWindowHandles()来得到窗口的引用了,其他的照旧。 省略省略省略。。。
http://www.51testing.com/html/59/n-2513659.html
方式1用js脚本代替webdriver的click操作
js = "var sss = document.getElementById('MainContent_gvReportHeader_proUpload_0'); sss.click();"
driver.execute_script(js)
方式2模拟鼠标键盘操作,代替webdriver的click操作
double_click=driver.find_element_by_xpath(".//*[@id='MainContent_gvReportHeader_proUpload_0']")
ActionChains(driver).double_click(double_click).perform()

  • 显性等待
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
        locator = (By.XPATH, ".//*[@id='datagrid-row-r1-2-0']/td[1]/div")
        WebDriverWait(driver, 20, 0.5).until(EC.presence_of_element_located(locator))   
try:
WebDriverWait(driver,20,0.5).until(EC.presence_of_element_located(locator))
printdriver.find_element_by_link_text('CSDN').get_attribute('href')
finally:
driver.close()
 
  • 截图
from datetime import *
driver.get_screenshot_as_file(u"D:\\selenium-test-img\\%s.png" % datetime.now().strftime("%Y%m%d.%H%M%S.%f")[:-3])
 





原创粉丝点击