selenium页面对象定位方法详解(四)

我们继续来讲下页面对象的定位方法,本文主要讲css_selector的定位方法。
那么讲css_selector其实和xpath一样,因为很多时候我们要定位的页面对象会没有id、name、class等属性,甚至
也无法通过link text的方法定位,所以我们就需要用到css_selector,css_selector对于所有的对象定位都是适用的!

1、find_element_by_css_selector

css_selector定位其实和xpath是类似的,只是写法有一些差异而已,它也有绝对路径和相对路径的定位方法。

1)绝对路径

绝对路径也是从html根节点开始查找起,
selenium页面对象定位方法详解(四)
那么我要定位这个输入框css的绝对路径写法如下:
一般用两种,第一种(用>来分割层级):
html>body>div>div>div>form>table>tbody>tr>td>input
复制代码

第二种(用空格来分割层级):
html body div div div form table tbody tr td input
复制代码

具体代码实现如下:
import time
from selenium import webdriver

driver = webdriver.Chrome()
driver.get(“http://www.bcbxhome.com”)
time.sleep(5)
driver.find_element_by_css_selector(“html>body>div>div>div>form>table>tbody>tr>td>input”)
driver.find_element_by_css_selector(“html body div div div form table tbody tr td input”).click()
复制代码

2)相对路径

比如我们可以看到要定位的输入框是有id的,我们可以直接写标签名称#id属性值
input#scbar_txt
复制代码
那么代码实现:
import time
from selenium import webdriver

driver = webdriver.Chrome()
driver.get(“http://www.bcbxhome.com”)
time.sleep(5)
driver.find_element_by_css_selector(“input#scbar_txt”)
复制代码

当然你也可以只写#id属性值,不写标签名称,如下:
#scbar_txt
复制代码

如果要定位的控件有class,我们可以直接写标签名称.class属性值
input.xg1
复制代码

那么代码实现:
import time
from selenium import webdriver

driver = webdriver.Chrome()
driver.get(“http://www.bcbxhome.com”)
time.sleep(5)
driver.find_element_by_css_selector(“input.xg1”)
复制代码

如果要定位的控件既没有id也没有class,那么我们可以通过其他属性定位,方法如下:
input[name=‘srchtxt’]
复制代码

如果一个属性无法唯一确定到此控件,可以通过多个控件组合定位:
input[value=‘请输入搜索内容’][type=‘text’]
复制代码

当然你要定的控件没有办法直接通过自身的属性定位,可以先定位父级,然后从父级定位到它!
selenium页面对象定位方法详解(四)
比如要定位input,我们可以先定位到form然后就可以定位到input了
form#scbar_form>table>tbody>tr>td>input
复制代码
当然因为tr下有多个td我们也可以通过nth-child加索引定位到第二个td

form#scbar_form>table>tbody>tr>td:nth-child(2)>input
复制代码

代码实现就非常简单了:
import time
from selenium import webdriver

driver = webdriver.Chrome()
driver.get(“http://www.bcbxhome.com”)
time.sleep(5)
driver.find_element_by_css_selector(“form#scbar_form>table>tbody>tr>td:nth-child(2)>input”)