zoukankan      html  css  js  c++  java
  • Selenium3+python3自动化(九)--定位一组元素find_elements

    前言

    前面的几篇都是讲如何定位一个元素,有时候一个页面上有很多个对象需要操作,如果一个个去定位的话,比较繁琐,这时候就可以定位一组对象。

    webdriver提供了定位一组元素的方法,跟前面八种定位方式其实一样,只是前面是单数,这里是复数形式:find_elements

    本篇以百度搜索为例,从搜索结果中随机选择一条搜索结果,然后点击查看。

    一、定位搜索结果

    1.在百度搜索框输入关键字“博客园”后,用F12查看页面元素,可以看到这些搜索结果有共同的属性。

     2.从搜索的结果可以看到,他们的父元素一样:<h3 class="t">

    3.标签都一样,且都是第一个a

    4.于是这里可以用xpath定位

    # coding:utf-8
    from selenium import webdriver
    import time
    driver=webdriver.Chrome()
    driver.get("https://www.baidu.com")
    driver.find_element_by_name("wd").send_keys("博客园")
    time.sleep(3)
    driver.find_element_by_id("su").click()
    r=driver.find_elements_by_xpath("//h3[@class='t']/a[1]")
    

     二、确认定位结果

    1.前面的定位策略得到的结果是a标签的所有内容,我们只需要a标签里面的部分内容。

    2.于是可以获取对象的属性,来验证下是不是定位准确了。这里可以获取href属性,打印出url地址

    for i in r:
        print(i.get_attribute("href"))
    

     三、随机函数

    1.搜索结果有7条,从这7条中随机取一个就ok了;也可以len(r)获取条数

    2.先导入随机函数:import random

    3.设置随机值范围为0~6:n=random.randint(0,6);

    # coding:utf-8
    from selenium import webdriver
    import time
    import random
    driver=webdriver.Chrome()
    driver.get("https://www.baidu.com")
    driver.find_element_by_name("wd").send_keys("博客园")
    time.sleep(3)
    driver.find_element_by_id("su").click()
    r=driver.find_elements_by_xpath("//h3[@class='t']/a[1]")
    # print(type(r),r)
    for i in r:
        print(i.get_attribute("href"))
    n=random.randint(1,len(r)) #取值1-7;所以r的脚标为n-1,即0-6
    print("查询结果的第{}条url为:{}".format(n,r[n-1].get_attribute("href")))  

     运行结果

    http://www.baidu.com/link?url=na4QKwFJC63VKzWvhM_5iJmMxMjCt61Nm0AG0m9MUWEdYvNVFLFozx8BMf62Ey12
    http://www.baidu.com/link?url=LgB5Fx0TpVFP3byCejOjkdDZTS6zdP-JM9_HDDBGBTlrOpPaJewnodT3IH2Uas5o
    http://www.baidu.com/link?url=FLKuauHhYeYzPHHcuy47KfIININ0VJLE7SxxWsgRAJtYjHVlKdUnY7BSiNpVM4uO
    http://www.baidu.com/link?url=hIqIAaxg8oDh2NZZUqxXy4pJzh0M8rPhHrje97oAZF28Ixru3r3agQe9tWcrS9zW
    http://www.baidu.com/link?url=kXjX6Hafm4udqMuExbT5unME7DiSLlHYuJJFcE-KDfenSvwli9EPja2TpzvMm-B-
    http://www.baidu.com/link?url=QNWevjIgcnt7IF7HxwF6ga6T8mq5-_eEN6Q8LIzkUwmwnVNs0oqW667Ly_GQCAtQ
    http://www.baidu.com/link?url=kDWd3gSyNpNr-QJX496m6bZ7T5ihEVRs9cCCSmz2qN7sHNgebiXu8d7NdXqZ2YNx
    查询结果的第2条url为:http://www.baidu.com/link?url=LgB5Fx0TpVFP3byCejOjkdDZTS6zdP-JM9_HDDBGBTlrOpPaJewnodT3IH2Uas5o
    

     四、随机打开url

    1.从返回结果中随机取一个url地址

    2.通过get方法打开url

    3.其实这种方式是接口测试了,不属于UI自动化,这里只是开阔下思维

    driver.get(nurl)

    五、通过click点击打开

    1.前面那种方法,是直接访问url地址,算是接口测试的范畴了,真正模拟用户点击行为,使用click的方法

    # coding:utf-8
    from selenium import webdriver
    import time
    import random
    driver=webdriver.Chrome()
    driver.get("https://www.baidu.com")
    driver.find_element_by_name("wd").send_keys("博客园")
    time.sleep(3)
    # driver.find_element_by_id("su").click()
    driver.find_element_by_name("wd").submit()
    r=driver.find_elements_by_xpath("//h3[@class='t']/a[1]")
    # print(type(r),r)
    # for i in r:
    #     print(i.get_attribute("href"))
    n=random.randint(1,len(r)) #取值1-7;所以r的脚标为n-1,即0-6
    nurl=r[n-1].get_attribute("href")
    print("查询结果的第{}条url为:{}".format(n,nurl))
    # driver.get(nurl)
    r[n-1].click()  

     运行结果:

    查询结果的第2条url为:http://www.baidu.com/link?url=O3LdwGFFL-xbVh_G-kAwRtND98nFqpHtfUkmMqOtezjmus9aDxUMb1nGtGUgZK0H
    

     上面代码中搜索框输入关键字后,没有使用click(),而是用的submit方法,submit()相当于回车键 

    越努力,越幸运!!! good good study,day day up!!!
  • 相关阅读:
    揭开Future的神秘面纱——任务取消
    阻塞队列和生产者-消费者模式
    ExecutorService——<T> Future<T> submit(Callable<T> task)
    ExecutorService接口概要
    Executor简介
    使用显式的Lock对象取代synchronized关键字进行同步
    SingleThreadExecutor(单线程执行器)
    后台线程(daemon)
    加入一个线程
    计算机网络的一些英文缩写词
  • 原文地址:https://www.cnblogs.com/canglongdao/p/13578145.html
Copyright © 2011-2022 走看看