selenium知识点

五迷三道 提交于 2020-03-12 04:45:17

八大定位方式

find_element_by_id:通过id查找

find_element_by_name:通过name查找

find_element_by_tag_name:通过tag查找

find_element_by_class_name:通过classname查找

find_element_by_link_text:通过超链接的文本查找(完全匹配)(类似xpath的text())

find_element_by_partial_link_text:同上,但是是部分查找

find_element_by_css_selector:通过css选择器

find_element_by_xpath:通过xpath

 

XPATH知识点总结:

/单斜杠绝对定位

//双斜杠相对定位

使用语法:

//标签[@属性=”值”]

特殊属性:

标签的文本属性值:text()

模糊查找:contains(@属性,"值")

 

轴运算:

ancestor:祖先节点,包括父节点,一直到根节点html

parent:父节点

preceding:当前元素节点标签之前的所有结点,一直到根节点html

preceding-sibling:当前元素节点标签之前的所有兄弟节点

following:当前元素节点标签之后的所有节点,一直到结束的根节点html
following-sibling:当前元素节点标签之后的所有兄弟节点

 

使用语法:(轴定位必须用单斜杠)

能定位到的已知的元素/轴名称::标签名称[@属性=”值”]

 

 

3个等待方式:

 

  1. time.sleep(固定时间)
    1. implicity_wait :隐性等待。等待元素被找到,等待命令执行完成
    2. WebDriverWait:显性等待,等待类,需要import,还需要引入条件库
  2. WebDriverWait(driver, 20, 1).until()  (20s等待超时,每隔1s检索一次)

括号内参数:

  1. driver:webdriver的实例
  2. 20:最多20s的等待时间
  3. 1:每隔1s间隔查询一次(内部机制查询)

until() :表示条件成立

until_not(): 表示条件不成立

隐式等待:设置一个超时时间,在这个时间内会去不断寻找元素(全局),超时找不到时就会报错;

显示等待:设置一个超时时间和一个元素查找条件,在这个时间内不断寻找这个元素,超时找不到时就会报错;

 

三大切换

  1. 切换窗口

driver.switch_to.window(handle)   切换窗口

Wins = driver.window_handles 获取当前所有句柄

driver.current_windows_handle 获取当前窗口的句柄

driver.switch_to.window(wins[-1])   切换到最后一个窗口

 

  1. 切换iframe

driver.switch_to.iframe()

3种方式

driver.switch_to.frame('name')   name属性
driver.switch_to.frame(1) 下标
driver.switch_to.frame(driver.find_elements_by_name("name"))  webElement对象

 

  1. alert 切换

弹出框分为3种

  1. alert   (弹框只有一个确定按钮)
  2. prompt (确定取消按钮)
  3. confirm (确定取消按钮还有一个输入框)

如何关闭他

al = driver.switch_to.alert   获取alert的实例

al.text alert显示的文本

al.accept() 相当于点击确定按钮

al.dismiss() 相当与取消按钮

al.send_keys(“string”) 在输入框内输入文本内容

鼠标操作

from selenium.webdriver.common.action_chains import ActionChains  引入类

ActionChains下面的函数

click() 点击

double_click() 双击

move_to_element() 悬浮鼠标放到元素的正中间

context_click() 右键

drag_and_drop() 一个元素拖拽到另外一个元素

drag_and_drop_by_offset()   坐标偏移的拖动

key_down() 按下按键,只处理控制键 control  shift  

例如:ctrl+c

ActionChains(driver).key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform()

 

pause(时间:秒) 暂停

 

先实例化ActionChains  

  1. 要操作的动作放在链表当中,找到元素,调用鼠标行为
  2. 调用perform()

 

下拉列表 select/option

from selenium.webdriver.support.select import Select

loc = (By.XPATH, 'xxxxx')

WebDriverWait(driver, 20).until(EC.visibility_of_element_located(loc))

select_ele = driver.find_element(*loc)

s = Select(select_ele)

s.select_by_index()   # 下标

s.select_by_value()   # option的value值

s.select_by_visible_text()   # 可见选项文本

 

 

键盘操作

from selenium.webdriver.common.keys import Keys  引入,常量

driver.find_element('').send_keys('ss', Keys.ENTER)

 

 

总结:

1) iframe切换:

  1)触发 iframe/alert

  2) 识别:元素是否在iframe当中???

  3)切换到iframe: 下标/name属性/webElement对象

     driver.switch_to.frame()

 

2)alert切换:--Alert类

   1)触发 iframe/alert

   2)切换  driver.switch_to.alert

   3) 关闭

 

3)鼠标操作  ActionChains类

   1)调用行为

   2)perform()执行

 

4)下拉列表  Select类

   非select: 弹出下拉框,等待下拉框中的元素可见,然后操作

   Select: 实例化类,根据下标/文本/value属性选值。

 

  1. 键盘操作   Keys类

 

Js操作

Selenium执行js

Driver.execute_script(script, *args)

 

 

滚动操作(会自动)

Element.scrollIntoView(); #js语句,元素滚动到页面最上方

Element.scrollIntoView(false); #js语句,元素滚动到页面最下方

window.scrollTo(0,document.boby.scrollHeight) #js语句,移动到页面底部

window.scrollTo(document.boby.scrollHeight,0) #js语句,移动到页面顶部

 

步骤

1)查找元素

loc = (By.PARTIAL_LINK_TEXT, '_百度翻译')

ele = driver.find_element(*loc)

  1. 运行命令

driver.execute_script("arguments[0].scrollIntoView();", ele)

备注:

arguments可以传多个元素,例如

driver.execute_script("arguments[0].scrollIntoView();arguments[1].scrollIntoView();", ele1,ele2)

 

 

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!