Selenium3自动化测试【20】CSS定位元素
CSS 指层叠样式表 (CascadingStyleSheets),CSS一种用来表现HTML或XML等文件样式的计算机语言,其能够灵活的为页面提供丰富样式的风格。
CSS使用选择器为页面元素绑定属性(如ID、class等),这些选择器可以被Selenium使用来进行定位元素。CSS较为灵活的选择控件的任意属性,CSS定位元素的速度比xpath速度快。
CSS定位是通过find_element_by_css_selector方法。
![微信图片_20210708082147.png](http://www.icode9.com/i/li/?n=2&i=images/20210708/1625704396578765.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
仍然以bing搜索页为例介绍CSS定位的用法。
要操作Bing搜索页。
- 通过CSS找到搜索框与搜索按钮元素;
- 通过键盘输入检索的关键字;
- 用鼠标单击搜索按钮;
- 提交搜索请求。
搜素框元素的html代码。
```
```
搜索按钮元素的html代码
```
```
**1. ID定位**
通过元素的ID,find_element_by_css_selector()方法实现的源码如下。
```
from selenium import webdriver
from time import sleep
driver = webdriver.Firefox()
driver.get("http://cn.bing.com/")
driver.find_element_by_css_selector("#sb_form_q").send_keys("bella")
driver.find_element_by_css_selector("#sb_form_go").click()
sleep(3)
driver.quit()
```
**2. class定位**
通过元素的class, find_element_by_css_selector()方法实现的源码如下。
```
from selenium import webdriver
from time import sleep
driver = webdriver.Firefox()
driver.get("http://cn.bing.com/")
```
**通过css - class定位**
```
driver.find_element_by_css_selector(".b_searchbox").send_keys("bella")
driver.find_element_by_css_selector(".b_searchboxSubmit").click()
sleep(1)
driver.quit()
```
3. 通过name属性定位
借助name属性,通过的find_element_by_css_selector()方法实现的源码如下。
```
from selenium import webdriver
from time import sleep
driver = webdriver.Firefox()
driver.get("http://cn.bing.com/")
```
通过css-属性定位
```
driver.find_element_by_css_selector("[name='q']").send_keys("bella")
driver.find_element_by_css_selector("[name='go']").click()
sleep(1)
driver.quit()
```
**4. CSS层级定位**
类似XPath的层级定位,CSS也可以通过层级(父元素)实现元素的定位。
搜索框元素的上一级是1个div标签,该div标签的clalss属性等于b_searchboxForm,html代码如下:
```
……
……
```
搜索按钮元素的上一级也是1个div标签,该div标签的id属性等于sb_go_par,该div的html代码如下:
```
。
```
搜素框元素与父元素(class等于b_searchboxForm)的结合。
```
find_element_by_css_selector("div.b_searchboxForm>input#sb_form_q")
```
搜索按钮元素与父元素(id等于sb_go_par)的结合。
```
find_element_by_css_selector("div#sb_go_par>input.b_searchboxSubmit")
```
可以看到父元素与子元素是通过 > 连接起来的。
通过CSS层级定位,find_element_by_css_selector()方法实现的源码如下。
```
from selenium import webdriver
from time import sleep
driver = webdriver.Firefox()
driver.get("http://cn.bing.com/")
```
**通过css 层级定位**
输入框为id,搜索按钮为class
```
driver.find_element_by_css_selector("div.b_searchboxForm>input#sb_form_q").send_keys("bella")
driver.find_element_by_css_selector("div#sb_go_par>input.b_searchboxSubmit").click()
sleep(1)
driver.quit()
```
可以通过FireFox浏览器自带的FireFox Developer Tools工具快速生成CSS语法,生成的操做方法与XPath相同,如图所示。
![在这里插入图片描述](https://www.icode9.com/i/ll/?i=20210708082320133.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2hiX2x4cA==,size_16,color_FFFFFF,t_70#pic_center)
单击【CSS选择器】,即可复制搜素框元素的CSS语法(#sb_form_q),这样快速的获取某元素的CSS语法。
单击【CSS路径】,可获取搜素框元素的CSS路径(类似XPath绝对路径),如图所示。
![微信图片_20210708082505.png](http://www.icode9.com/i/li/?n=2&i=images/20210708/1625704490597925.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
搜素框元素的CSS路径。
```
html body.zhs.zh-CN.ltr table#hp_table tbody tr td#hp_cellCenter.hp_hd div#hp_container div#sbox.sw_sform div.search_controls form#sb_form.sw_box div.b_searchboxForm input#sb_form_q.b_searchbox
```
搜素按钮元素的CSS路径。
```
html body.zhs.zh-CN.ltr table#hp_table tbody tr td#hp_cellCenter.hp_hd div#hp_container div#sbox.sw_sform div.search_controls form#sb_form.sw_box div.b_searchboxForm div#sb_go_par input#sb_form_go.b_searchboxSubmit
```
通过CSS绝对路径,find_element_by_css_selector()方法实现的源码如下。
```
from selenium import webdriver
from time import sleep
driver = webdriver.Firefox()
driver.get("http://cn.bing.com/")
```
通过css 层级 # 通过完成css路径来定位
```
driver.find_element_by_css_selector("html body.zhs.zh-CN table#hp_table tbody tr td#hp_cellCenter.hp_hd div#hp_container div#sbox.sw_sform div.search_controls form#sb_form.sw_box div.b_searchboxForm input#sb_form_q.b_searchbox").send_keys("bella")
driver.find_element_by_css_selector("html body.zhs.zh-CN table#hp_table tbody tr td#hp_cellCenter.hp_hd div#hp_container div#sbox.sw_sform div.search_controls form#sb_form.sw_box div.b_searchboxForm input#sb_form_go.b_searchboxSubmit").click()
sleep(3)
driver.quit()
```
如果你觉的文章读的不过瘾,可以查看详细的视频教程。
【2021】UI自动化测试:Selenium3自动化测试
https://edu.51cto.com/course/26488.html
【测试全系列视频课程】请点击我哦.....
(https://edu.51cto.com/lecturer/968349.html)
图书京东、当当有售
京东:https://item.jd.com/12784287.html
当当:http://product.dangdang.com/29177828.html
![](http://www.icode9.com/i/li/?n=4&i=images/blog/202105/17/9aaae5b26d3aa45aff77e35ef47e1627.jpg?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)