• 自动化2


    1、获取name属性进行测试

      a. Java版

     1 package eight_position;
     2 
     3 //导入WebDriver所需的
     4 import org.openqa.selenium.By;
     5 import org.openqa.selenium.WebDriver;
     6 import org.openqa.selenium.firefox.FirefoxDriver;
     7 
     8 public class eightposition {
     9     public static void main(String args[]) throws InterruptedException {
    10         System.setProperty("webdriver.gecko.driver","D:\BrowserDriver\geckodriver.exe");
    11         
    12         WebDriver driver = new FirefoxDriver();
    13         driver.manage().window().maximize();
    14         driver.get("https://www.baidu.com/");
    15         driver.findElement(By.name("wd")).sendKeys("12345");
    16         Thread.sleep(3000);
    17         driver.findElement(By.id("su")).click();
    18         Thread.sleep(3000);
    19         driver.quit();
    20     }
    21 }

       

      b. Python版 

     1 # 引入selenium包
     2 from selenium import webdriver
     3 
     4 # 启动浏览器,创建一个webdriver对象wd,传递参数浏览器驱动,这里字符串前的 r 用于告诉计算机这是个原始字符串,不需要转义
     5 wd = webdriver.Chrome(r'D:Browserchromedriver.exe')
     6 
     7 # 操作对象打开某网站
     8 wd.get('http://www.baidu.com')
     9 
    10 # 依据id选择元素,返回的就是该元素对应的webElement对象
    11 element = wd.find_element_by_id('kw')
    12 
    13 # 在获取的输入栏中输入字符(这里可以直接在字符串结尾添加 换行 转义字符,相当于回车查询,就不需要再一次查找按钮元素的位置,触发点击事件)
    14 # 即以下三句可以合并为: element.send_keys('墨小澄
    ')
    15 element.send_keys('墨小澄')
    16 element=wd.find_element_by_id('su')
    17 element.click()
    18 pass

    2、By.id():获取id属性

      a. Java版

       b. Python版 

     1 # 引入selenium包
     2 from selenium import webdriver
     3 
     4 # 启动浏览器,创建一个webdriver对象wd,传递参数浏览器驱动,这里字符串前的 r 用于告诉计算机这是个原始字符串,不需要转义
     5 wd = webdriver.Chrome(r'D:Browserchromedriver.exe')
     6 
     7 # 操作对象打开某网站
     8 wd.get('http://www.baidu.com')
     9 
    10 # 依据id选择元素,返回的就是该元素对应的webElement对象
    11 element = wd.find_element_by_id('kw')
    12 
    13 # 在获取的输入栏中输入字符(这里可以直接在字符串结尾添加 换行 转义字符,相当于回车查询,就不需要再一次查找按钮元素的位置,触发点击事件)
    14 # 即以下三句可以合并为: element.send_keys('墨小澄
    ')
    15 element.send_keys('墨小澄')
    16 element=wd.find_element_by_id('su')
    17 element.click()
    18 pass

    3、获取class属性值

      a. Java(暂定)

      b. Python 

     2 wd = webdriver.Chrome(r'D:BrowserDriverchromedriver.exe')
     3 wd.get('http://scd1.python3.vip/files/selenium/sample.html')
     4 
     5 # 依据 class name选择元素,返回的是一个列表
     6 # 列表里都是 class属性值为animal的元素对应的webElement对象
     7 # find_element_by_class_name: 获取class属性 
     8 element = wd.find_elements_by_class_name('animal)
    9 for element in elements: 10 print(element.text)

      【Tips】这里element后面加了 s 。

          wd.find_elements_by_class_name('animal')

          当一个元素有多个class属性值时,只需要选择其中一个即可,不可全部写入其中。

          区别

            * find_elements:返回的是找到的是符合条件的所有元素,放在一个列表中返回,如果没有符合条件的元素,就返回空列表;

            * find_element:只返回第一个元素。没有符合条件的,会抛出 NoSuchElementException 异常。

    4、依据tag名选择元素(tag: 网页开发中的所有标签)

      a. JAVA(暂定)

      b. Python

    1 from selenium import webdriver
    2 wd = webdriver.Chrome(r'D:BrowserDriverchromedriver.exe')
    3 wd.get('http://cdn1.python3.vip/files/selenium/sample1.html')
    4 # 获取网页中的div标签
    5 elements=wd.find_elements_by_tag_name('div')
    6 for element in elements:
    7     print(element.text)

    5、通过WebElement对象选择元素

      a. JAVA(暂定)

      b. python

      WebElement兑现也可以调用find_elements_by_xxx,find_element_by_xxx之类的方法。

      区别:  * WebDriver对象 选择元素的范围是 整个页面

           * WebElement对象 选择元素的范围是 该元素的内部

    1 from selenium import webdriver
    2 wd=webdriver.Chrome(r'D:BrowserDriverchromedriver.exe')
    3 wd.get('http://cdn1.python3.vip/files/selenium/sample1.html'4 element=wd.find_element_by_id('container')
    5 # 限制 选择元素的范围是 id为 container 元素的内部
    6 spans=element.find_elements_by_tag_name('span')
    7 for span in spans:
    8     print(span.text)

    6、等待界面元素出现(Python)

      当我们进行网页操作时,有的元素会延迟加载。例如百度浏览器搜索某个东西,点击搜索后,浏览器发送搜索请求给服务器,服务器处理后返回结果,这段传输需要一定时间,百度服务器处理比较快,因为其搜索的结果对应的界面元素的id为数字1,2……

      我们直接脚本控制搜索可能会报NoSuchElementException异常,原因是脚本执行速度比服务器响应要快,没有收到服务器返回的结果。此时需要等待再打印选中元素的值

     1 from selenium import webdriver
     2 wd=webdriver.Chrome(r'D:BrowserDriverchromedriver.exe')
     3 wd.get('http://www.baidu.com')
     4 element=wd.find_element_by_id('kw')
     5 element.send_keys('12306
    ')
     6 # 需要导入时间包
     7 from time import sleep
     8 sleep(2)
     9 element=wd.find_elemnet_by_id('1')
    10 print(element.text)

       ——》总结1、selenium找不到元素的原因:

              a. 页面加载过慢——可加载页面等待时间;

                i. 时间设为显示等待:针对某个特定的元素设置的等待时间,规定h时间内,没找到元素,抛异常,

              b. 查到的元素没有在当前的框架中——需要切换至对应的框架中;

              c. 元素错误;

          =》 2、selenium(python)等待时间:

             1. sleep(second) —— 强制等待,封装在time中的sleep类中;

    1 from selenium import webdriver
    2 wd=webdriver.Chrome(r'D:BrowserDriverchromedriver.exe')
    3 wd.get('http://www.baidu.com')
    4 element=wd.find_element_by_id('kw')
    5 element.send_keys('12306
    ')
    6 from time import sleep
    7 sleep(2)
    8 element=wd.find_element_by_id('1')
    9 print(element.text)

             2. WebDriverWait(driver,timeout,poll_frequency,ignored_exceptions)——显示等待,当找到要娇艳的元素后就继续执行下面的程序,非强制等待;

              * driver         浏览器驱动;

              * timeout         最长超时,秒为单位;

              * poll_frequency  检测间隔(步长)时间,默认0.5s;

              * ignored_frequency 超时后的异常信息,默认情况下抛出NoSuchEleosumentException;

              * webDriverWait  一般和until()和until_not()方法配合使用;

     1 from selenium import webdriver
     2 from time import sleep
     3 # 从selenium.webdriver.common.by导入By包进行元素定位
     4 # By是selenium中内置的一个class,在这个class中有各种方法定位元素
     5 '''
     6 By所支持的定位器的分类:
     7  -classname属性定位:
     8     CLASS_NAME='class name'                 =》find_element(By.CLASS_NAME,"claname")
     9  -css选择器定位:
    10     CSS_SELECTOR='css selector'             => find_element(By.CSS_SELECTOR,"#id")
    11  -id属性定位:
    12     ID='id'                                 => find_element(By.ID,"id")
    13  -a标签文本属性定位:
    14     LINK_TEXT='link text'                   => find_element(By.LINK_TEXT,"text")
    15  -name属性定位:
    16     NAME='name'                             => find_element(By.NAME,"name")
    17  -a标签部分文本属性定位
    18     PARTIAL_LINK_TEXT='partial link text'   => find_element(By.PARTIAL_LINK_TEXT,"partailtext")
    19  -标签名定位:
    20     TAG_NAME='tag name'                     => find_element(By.TAG_NAME,"input")
    21  -xpath路径定位:
    22     XPATH='xpath'                           => find_element(By.XPATH,"//div[$name='name']")
    23 主要应用于一个过滤器,webdriver的方法是一个定位器
    24 
    25 expected_conditions as EC中的方法:
    26 title_is: 判断当前页面的title是否完全等于(==)预期字符串,返回布尔值
    27 title_contains : 判断当前页面的title是否包含预期字符串,返回布尔值
    28 presence_of_element_located : 判断某个元素是否被加到了dom树里,并不代表该元素一定可见
    29 visibility_of_element_located : 判断某个元素是否可见. 可见代表元素非隐藏,并且元素的宽和高都不等于0
    30 visibility_of : 跟上面的方法做一样的事情,只是上面的方法要传入locator,这个方法直接传定位到的element就好了
    31 presence_of_all_elements_located : 判断是否至少有1个元素存在于dom树中。举个例子,如果页面上有n个元素的class都是‘column-md-3‘,那么只要有1个元素存在,这个方法就返回True
    32 text_to_be_present_in_element : 判断某个元素中的text是否 包含 了预期的字符串
    33 text_to_be_present_in_element_value : 判断某个元素中的value属性是否 包含 了预期的字符串
    34 frame_to_be_available_and_switch_to_it : 判断该frame是否可以switch进去,如果可以的话,返回True并且switch进去,否则返回False
    35 invisibility_of_element_located : 判断某个元素中是否不存在于dom树或不可见
    36 element_to_be_clickable : 判断某个元素中是否可见并且是enable的,这样的话才叫clickable
    37 staleness_of : 等某个元素从dom树中移除,注意,这个方法也是返回True或False
    38 element_to_be_selected : 判断某个元素是否被选中了,一般用在下拉列表
    39 element_selection_state_to_be : 判断某个元素的选中状态是否符合预期
    40 element_located_selection_state_to_be : 跟上面的方法作用一样,只是上面的方法传入定位到的element,而这个方法传入locator
    41 alert_is_present : 判断页面上是否存在alert
    42 '''
    43 from selenium.webdriver.common.by import By
    44 from selenium.webdriver.support.ui import WebDriverWait
    45 from selenium.webdriver.support import expected_conditions as EC
    46 # WebDriverWait 显示等待
    47 driver = webdriver.Chrome(r'D:BrowserDriverchromedriver.exe')
    48 driver.get("http://www.baidu.com")
    49 el = driver.find_element_by_xpath('//*[@id="kw"]')
    50 element=WebDriverWait(driver,5,0.5).until(EC.presence_of_element_located((By.ID,"kw")))
    51 element.send_keys('selenium')
    52 driver.find_element_by_xpath('//*[@id="su"]').click()
    53 sleep(5)
    54 driver.quit()

            3. implicicitly(second)——隐式等待,设置最长等待时长,若在特定时间内未找到元素则抛出NoSuchEleosumentException异常;

     1 # 隐式等待
     2 from selenium import webdriver
     3 from time import sleep,ctime
     4 from selenium.common.exceptions import NoSuchElementException
     5 driver=webdriver.Chrome(r'D:BrowserDriverchromedriver.exe')
     6 driver.implicitly_wait(10)
     7 driver.get('http://www.baidu.com/')
     8 try:
     9     print(ctime())
    10     driver.find_element_by_xpath('//*[@id="kw"]').send_keys("selenium")
    11     driver.find_element_by_xpath('//*[@id="su"]').click()
    12 except NoSuchElementException as E:
    13     print(E)
    14 finally:
    15     print(ctime())
    16     driver.quit()

        【Tips】隐式等待会等driver完全加载完成,显示等待仅仅校验需要加载的元素是否存在。

  • 相关阅读:
    Linq to xml 示例分析
    Nhibernate学习笔记
    SQL – 11.练习
    集合 ArrayList
    分享一个不错的VS插件——CodeMap(转发)
    wamp配置虚拟主机,虚拟目录,伪静态
    RBAC (RoleBased Access Control)基于角色的访问控制
    PHP的面向对象
    一名靠谱的JavaScript程序员应备的素质
    Javascript 广告定位
  • 原文地址:https://www.cnblogs.com/Free-Ink/p/12502494.html
Copyright © 2020-2023  润新知