几乎所有的自动化工具要模拟用户操作,都要识别出用户在对哪个元素做什么操作。
哪个元素即操作元素的识别,就是大家通常说的元素定位。Selenium根据我们提供的元素定位信息,找到对应元素,然后做后续的操作。如果元素定位有问题,则可能导致操作失败,或者操作到其他元素,导致无法实现预期效果。
那么如何进行元素定位呢,Selenium的WebDriver提供了8大元素定位方式,我们先看前六种元素定位方式。
1.0如何查看元素属性
如何知道一个按钮的ID是什么,Name或者Class Name是什么呢?
每个浏览器几乎都有开发者工具,我们可以在里边进行Web前端的调试等操作:
A.可以在浏览器菜单中查找,或者直接按F12打开开发者工具;
B.切换到Elements页签,
C.点击左上角鼠标图标,
D.把鼠标移动到想查看的元素上,右侧展示对应web元素的属性等信息
1.1根据ID定位
假设要操作的Web元素定义如下:
这里有个属性是id="su",那么我们可以根据id进行元素定位:
element = driver.find_element_by_id("su")
1.2根据NAME
这里有个属性是name="wd",那么我们可以根据name进行元素定位:
element = driver.find_element_by_name("wd")
1.3根据LinkText
如果一个超链接元素,没有id和name属性,链接文本信息是唯一的:
那么我们可以根据link_text进行定位:
element = driver.find_element_by_link_text(
"贴吧")1.4根据PartialLinkText
我们可以做超链接字符串的部分匹配:
超链接字符串为:Python(计算机程序设计语言)_百度百科
我们查找时进行部分匹配:在当前页面查找超链接字符串包含“_百度百科”的元素
ele = driver.find_element_by_partial_link_text("_百度百科")
ele.click()
1.5根据class Name
每个元素在定义时有class属性,相当于把这个元素划归到某类中:
则可以根据类别名称进行定位:
ele = driver.find_element_by_class_name("s_ipt")
*如果元素定义时class值中间带空格,相当于这个元素同时属于多个类别:
按照整个class的值定位会失败,可以根据部分类名定位:
ele = driver.find_element_by_class_name("s_ipt_wr")
1.6根据tag Name
每个元素在HTML文件中,都有个标签名称,如input,div,form,span等:
若元素没有id,name这些易于定义的属性,也可以根据标签名称input进行定位:
ele = driver.find_element_by_tag_name("input")
*通常一个页面上同类型的标签会不止一个,需要进行过滤。
更多内容请参考:
閱讀更多 古衣達 的文章