selenium元素定位方法(多元素操作)
上一期讲解了selenium的基础定位方法(单个元素),该方法基本可以完成一些较为简单的元素定位及其操作。
上期讲解的八种基本定位方式,都有对应的复数形式,分别是下面这些:
id复数定位find_elements_by_id()name复数定位find_elements_by_name() class复数定位find_elements_by_class_name() tag复数定位find_elements_by_tag_name() link复数定位find_elements_by_link_text() partial_link复数定位find_elements_by_partial_link_text() xpath复数定位find_elements_by_xpath() css复数定位find_elements_by_css_selector() 这些复数定位方式每次取到的都是具有相同类型属性的一组元素,返回的是一个list队列,我们也可以利用这个去定位单个的元素。
接下来就拿实际工作中最常见也最为有效的定位方法“xpath”来详细讲解多个元素定位方法:如图:显示为睿江云的云主机管理页面默认每页显示10台主机,在实际工作中我们需要获取主机的信息如主机编号,来标识我们自动化运行到那一台主机以及该主机测试的情况。
前端元素情况
<span _ngcontent-c8="" class="text-primary">A-08-509-26-20181123-013</span><span _ngcontent-c8="" class="text-primary">A-08-509-26-20181116-016</span><span_ngcontent-c8="" class="text-primary">A-08-509-26-20181109-015</span>
抽取前三台主机情况可以看出都有class=”text-primary”,可以断定主机编号的元素可以通过//span[@class=”text-primary”]来进行该页面的所有元素获取。
Selenium编写方式find_elements_by_xpath(‘//span[@class=”text-primary”]’) ,这样就可以获取一个list里面存放了该页面的所有主机编号的元素定位。
可以通过循环来直观显示出来相应的数据。
Vmcode = find_elements_by_xpath(‘//span[@class="text-primary"]’)for vm in Vmcode: print(vm.text())
以上元素定位及上一期的单元素定位情况基本能满足实际工作中的需求,但是有的时候就是会出现一些诡异的定位失效或者定位到了点击失效的问题,这个时候如果用js进行直接执行该事件,往往就可以解决那些诡异的事情。
id定位:document.getElementById()
name定位:document.getElementsByName()
tag定位:document.getElementsByTagName()
class定位:document.getElementsByClassName()
css定位:document.querySelectorAll()
其中只有id对象用的是Element返回是单个对象,其他都是Elements返回的是一个list这点千万要注意,具体用法和上面的webdriver基础定位一样。先写好对应的js语句,可以先赋值给一个变量,然后后调用execute_script进行执行一下js就好了,
百度例子:driver.execute_script("document.getElementById('su').click();")
无敌的jQuery定位
据说会jQuery定位的在定位的路上就是披襟斩棘,所向披靡~如此超神的定位,还是可以了解一下的~
jQuery语法是为HTML元素的选取编制的,可以对元素执行一些具体的操作
基础语法是$(selector).action()
$符号定义jQuery,selector选择器用来查询具体的HTML元素,通过action()来执行对元素的具体操作。
其中我们经常用到的action()在jq中有这么几种:
$(selector).val('input_value') 其中input_value表示要输入的文本的值
$(selector).val('') 如果为空,则执行后是清空的意思
$(selector).click() 行为也是肯定有的
让我们结合百度的例子看一下,用jQuery的写法和js有一点点的类似,但明显简洁多了
睿江云官网链接:https://www.eflycloud.com/home?from=RJ0032