前言
随着前端框架的变化,原来的八大定位方式引申的进阶版定位方式
目录
一、第三方库senlenium基本方法与具体使用
①send_Keys方法:模拟键盘输入
driver.find_element_by_id("kw").send_keys("python")
②text方法:获取你定位的
driver.find_element_by_link_text("新闻").text
③get_attribute();获取元素value属性的值
driver.find_element_by_id("su").get_attribute("value")
④maximize_window():浏览器窗口最大化
driver.maximize_window()
⑤current_window_handle:返回窗口句柄,意思就是标识窗口的字符串。
driver.current_window_handle
⑥current_url:获取当前窗口URL,
driver.current_url
⑦is_selected():判断是否被选择,如果多选框是被选中,则true
find_element_by_id("xx").is_selected()
⑧is_enabled():如果元素可用,则true
find_element_by_id("kw").is_enabled()
二、元素之八大定位方法
备注:以下举例得第二种方法selenium版本4.3.0更新后使用并弃用第一种方法
①id定位是通过元素的id属性来定位元素,html规定id属性在整个html文档中必须是唯一的。
例:element = driver.find_element_by_id("id值")
element = driver.find_element(By.ID,"id值")
②name定位就是根据元素属性来定位,html文档中name的属性值是可以重复的。
如果name有多个属性值,默认使用第一个。
例:element = driver.find_element_by_name("name值")
element = driver.find_element(By.NAME,"name值")
③class_Name定位就是根据元素class属性值来定位元素,html通过使用class来定位元素的样式。如果class有多个属性值,默认返回第一个
例:element = driver.find_element_by_class_name("页面元素的Class属性值")
driver.find_element(By.CLASS_NAME,"页面元素的Class属性值")
④tag_name 定位是通过标签名来定位,html本质上是由不同的tag组成,每一种标签一般在页面会存在多个,所以不方便进行精准定位,一般很少用
例:element = driver.find_element_by_tag_name("标签名")
element = driver.find_element(By.TAG_NAME,"标签名")
⑤link_text只能定位超链接标签,可以精准定位a标签的全部文本内容(一般不用)
例:element = driver.find_element_by_link_text("链接的全部文字")
element = driver.find_element(By.LINK_TEXT,"链接的全部文字")
⑥partial_link_text只能定位超链接标签,输入部分链接文字即可
例:driver.find_element_by_partial_link_text("链接的部分文字")
element = driver.find_element(By.PARTIAL_LINK_TEXT,"链接的部分文字")
⑦XPath 为XML Path的简称,是一门在XML文档中查找元素信息的语言,HTML可以看做是XML的一种表现。XPath主要是通过元素的路径来定位,其中,路径又分为绝对路径、相对路径(XML是一种标记语言,用于数据的存储和传递。)
绝对路径:从最外层元素到指定元素之间所有经过元素层级的路径
说明:一般情况下使用较多,如果前端变动较大的情况下,可以使用元素嵌套的方式
例:element = driver.find_element_by_xpath("//*[@id='username")
element = driver.find_element(By.XPATH,"//*[@id='username")
⑧css定位就是通过css选择器工具进行定位,css是一种标记语言,用于控制数据的样式。在selenium中推荐使用CSS定位,对比:CSS比Xpath定位速度要快,Xpath比CSS更方便
例:driver.find_element_by_css_selector("[name='password']")
element = driver.find_element(By.CSS_SELECTOR,"[name='password']")
三、终极奥义元素嵌套
在使用XPath是发现属性是动态时使用(元素是动态时最好不要使用绝对路劲)
如图
看到xpath是id属性带有数值的99.9%是动态的。其它的属性又不是唯一的这时候该如何应对呢?使用绝对路劲?最好的方法是元素嵌套
方法:在该元素中使用俩个属性进行定位如
例:
//*[@type="button" and @class=" x-btn-text update"]
如果查询发现还不是唯一的呢?这个时候就可以往上找父级直到找到使用上述方法查询是唯一值时在进行下一步的相对路劲嵌套最对路劲如
//*[@class="x-panel-tbar x-panel-tbar-noborder" and @style="width: 1674px;"]/div/table/tbody/tr/td/table/tbody/tr/td
如果遇到tr下有多个td,阁下该如何应对呢?直接再次嵌套或者直接数是第几个td
双重嵌套例子:
//*[@class="x-panel-tbar x-panel-tbar-noborder" and @style="width: 1674px;"]/div/table/tbody/tr/td/table/tbody/tr/td[@属性]/table/tbody/tr[2]/td[2]/em/button
数值例子:
//*[@class="x-panel-tbar x-panel-tbar-noborder" and @style="width: 1674px;"]/div/table/tbody/tr/td/table/tbody/tr/td[6]/table/tbody/tr[2]/td[2]/em/button
如图
到这里,终极奥义你已经学会,需要注意的是嵌套中@属性中的属性也需要是唯一值不唯一的话可以直接使用数值大法即可