zoukankan      html  css  js  c++  java
  • 自动化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完全加载完成,显示等待仅仅校验需要加载的元素是否存在。

  • 相关阅读:
    Saltstack module apache 详解
    Saltstack module ip 详解
    Saltstack module iosconfig 详解
    Saltstack module introspect 详解
    Saltstack module inspector 详解
    Saltstack module ini 详解
    Saltstack module incron 详解
    Modbus 指令 RS485指令规则
    停车系统对接第三方在线支付平台(二)
    停车系统对接第三方在线支付平台
  • 原文地址:https://www.cnblogs.com/Free-Ink/p/12502494.html
Copyright © 2011-2022 走看看