selenium+常见操作

1.多窗口操作

   有些页面的链接打开后,会重新打开一个窗口,对于这种情况,想在新页面上操作,就得先切换窗口了。获取窗口的唯一标识用句柄表示,所以只需要切换句柄,我们就能在多个页面上灵活自如的操作了。

   句柄(handle):识别浏览器窗口的属性

   获取当前窗口的句柄:driver.current_window_handle

   获取当前所以的句柄:driver.current_window_handles

   切换窗口:switch_to.window(all_h[1])(其中all_h[1]为需要访问窗口的句柄)

from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://bj.ganji.com/")
h = driver.current_window_handle
driver.maximize_window()
print (h)  # 打印首页句柄
driver.find_element_by_link_text("工作").click()
all_h = driver.window_handles
print (all_h)     # 打印所有的句柄
#获取list里面第二个直接切换
driver.switch_to.window(all_h[1])
print (driver.title)
# 关闭新窗口
#driver.close()
# 切换到首页句柄
driver.switch_to.window(h)
# 打印当前的title
print (driver.title)

2.下拉框操作

   1. 基本思路:先定位select框,再定位select里的选项  

       定位select中的选项可以通过以下几种方式:

       select_by_index()  :通过索引定位
       select_by_value()  :通过value值定位
       select_by_visible_text() :通过文本值定位
       deselect_all()          :取消所有选项
       deselect_by_index()     :取消对应index选项
      deselect_by_value()      :取消对应value选项
      deselect_by_visible_text() :取消对应文本选项
      first_selected_option()  :返回第一个选项
      all_selected_options()   :返回所有的选项

        eg:s = driver.find_element_by_id(" ")

               Select(s).select_by_visible_text(" ")

   2.直接通过xpath定位

      eg:driver.find_element_by_xpath(" ").click() 

from selenium import webdriver
from selenium.webdriver.support.ui import Select
import time
driver = webdriver.Chrome()
driver.get('http://sahitest.com/demo/selectTest.htm')
time.sleep(1)
s1 = Select(driver.find_element_by_id('s1Id'))  # 实例化Select
time.sleep(1)
s1.select_by_index(1)  # 选择第二项选项:o1
time.sleep(1)
s1.select_by_value("o2")  # 选择value="o2"的项
time.sleep(1)
s1.select_by_visible_text("o3")  # 选择text="o3"的值,即在下拉时我们可以看到的文本
time.sleep(1)

 

三.弹出框的操作

     弹出框基本为三种:alert(只有确定按钮和x的按钮)\confirm(比alert多个取消的按钮)\promp(内含文本框)

     alert操作:

    1.先用switch_to_alert()方法切换到alert弹出框上

    2.可以用text方法获取弹出的文本 信息

    3.accept()点击确认按钮

    4.dismiss()相当于点右上角x,取消弹出框

     confirm操作:

     1.先用switch_to_alert()方法切换到alert弹出框上

     2.可以用text方法获取弹出的文本 信息

     3.accept()点击确认按钮

     4.dismiss()相当于点取消按钮或点右上角x,取消弹出框

     prompt操作

     1.先用switch_to_alert()方法切换到alert弹出框上

     2.可以用text方法获取弹出的文本 信息

     3.accept()点击确认按钮

     4.dismiss()相当于点右上角x,取消弹出框

     5.send_keys()这里多个输入框,可以用send_keys()方法输入文本内容

 

 四.滚动条操作  

   滚动条是无法直接用定位工具来定位的。selenium里面也没有直接的方法去控制滚动条,

    这时候只能借助Js了,还好selenium提供了一个操作js的方法:

   execute_script(),可以直接执行js的脚本。

   scrollTo(x, y),第一个参数x是横向距离,第二个参数y是纵向距离

   1.#滚动到底部
    js = "window.scrollTo(0,document.body.scrollHeight)"
    driver.execute_script(js)

   2.#滚动到顶部
     js = "window.scrollTo(0,0)"
    driver.execute_script(js)

from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("http://www.cnblogs.com/fenhong/")
#print (driver.name)
#滚动到底部
js = "window.scrollTo(0,document.body.scrollHeight)"
driver.execute_script(js)
time.sleep(10)
#滚动到顶部
js = "window.scrollTo(0,0)"
driver.execute_script(js)

 

五.元素聚焦
   1.虽然用上面的方法可以解决拖动滚动条的位置问题,但是有时候无法确定我需要操作的元素

    在什么位置,有可能每次打开的页面不一样,元素所在的位置也不一样,怎么办呢?

   2.这个时候我们可以先让页面直接跳到元素出现的位置,然后就可以操作了。同样需要借助JS去实现。
   3.元素聚焦:

   target = driver.find_element_by_xxxx()
   driver.execute_script("arguments[0].scrollIntoView();", target)

 

六.单选框,多选框操作

    判断是否选中:is_selected()

     选择的操作就直接定位到需要选择的框然后click()一下就好;全选时可以获取全部的选择框然后循环click()。