selenium自动化

目前,逐渐体会到自动化的作用,为了解决工作中经常重复的动作。 如果一项动作在每次项目中都要用到,就可以考虑把他自动化了。

只要能解放双手,即使实现很小的功能,也叫作自动化。

在慢慢梳理测试过程中可以自动化的一些操作。

 

场景一:

  • 背景:目前项目中android打apk包,需要登录jenkins账号--->选择job--->在job详情页选择build with parameters,选择环境及分支--->点击立即构建

      可变参数:

      runtime:【"DEV"、"TEST"、"PRE"、"RELEASE"】

      branch:【origin/master-bug、origin/master、origin/NetHospital、origin/2.2.0R、origin/2.1.1R】需求

  • 需求:解放双手,自动化实现登录,选择对应的job,立即构建。
  • 代码
import unittest
from selenium import webdriverfrom time import sleep
from selenium.webdriver.support.select import Select
class jenkins_unpack(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        cls.driver = webdriver.Chrome()
        cls.driver.maximize_window()

    def test_001_jenkins_login(self):
        username = "root" 
        passwd = "123456"
        # 打开url
        self.driver.get("http://localhost:8080/jenkins/login?from=%2Fjenkins%2F")
        self.driver.find_element_by_name('j_username').clear()
        self.driver.find_element_by_name('j_username').send_keys(username)
        sleep(3)
        self.driver.find_element_by_name('j_password').clear()
        self.driver.find_element_by_name('j_password').send_keys(passwd)
        sleep(3)
        self.driver.find_element_by_id('yui-gen1').click()
        sleep(10)

    def test_002_click_job(self):
        """从列表页点击进入job详情"""
        self.driver.find_element_by_partial_link_text('-doctor').click()
        sleep(10)

    def test_003_unpack(self):
        """详情页选择要构建的环境及分支"""
        self.driver.find_element_by_link_text('Build with Parameters').click()
        sleep(5)
        # 按照索引选中第一个-选择test环境
        runtime = self.driver.find_element_by_xpath('//*[@id="main-panel"]/form/table/tbody[1]/tr[1]/td[3]/div/select')
        # 环境["DEV"、"TEST"、"PRE"、"RELEASE"]--通过索引查询ok,其他两种方式试了不行
        Select(runtime).select_by_index("1")
        # 按照索引选中第一个-选择NetHospital分支
        self.driver.find_element_by_xpath("//*[@id='select']/option[4]").click()
        self.driver.implicitly_wait(5)
        # branch = self.driver.find_element_by_xpath('//*[@id="BRANCH-d6130d93-98b5-4095-a27e-1b868f289c9c"]/input')
        # Select(branch).select_by_visible_text('origin/NetHospital')  #用select一直有问题
        # 点击开始构建
        self.driver.find_element_by_id('yui-gen1-button').click()

    @classmethod
    def tearDownClass(cls):
        cls.driver.quit()

if __name__ == '__main__':
    unittest.main()

 

  

 涉及到的知识点

1.unittest.TestCase

setUp():每个测试case运行之前运行
tearDown():每个测试case运行完之后执行
setUpClass():必须使用@classmethod 装饰器,  所有case运行之前只运行一次
tearDownClass():必须使用@classmethod装饰器, 所有case运行完之后只运行一次

文章源于:https://www.cnblogs.com/zpf1092841490/p/10114372.html

2.selenium的八大定位方式---定位一个元素的方法

  • driver.find_element_by_name()——最常用,简单
  • driver.find_element_by_id()——最常用,简单
  • driver.find_element_by_class_name()
  • driver.find_element_by_tag_name()——最不靠谱
  • driver.find_element_by_link_text()——定位文字连接好用
  • driver.find_element_by_partial_link_text()——定位文字连接好用
  • driver.find_element_by_xpath()——最灵活,万能
  • driver.find_element_by_css_selector()

文章源于:https://www.cnblogs.com/VseYoung/p/selenium_location_python.html

3.selenium下拉框处理

取的是TEST

from selenium.webdriver.support.select import Select
runtime = self.driver.find_element_by_xpath('//*[@id="main-panel"]/form/table/tbody[1]/tr[1]/td[3]/div/select')
Select(runtime).select_by_index("1")#索引 从0开始
Select(runtime).select_by_value("TEST")#根据属性值显示 如value="TEST"
Select(runtime).seletct_visible_text("TEST")#根据文本值定位

 

 

 4.下面这个问题用上边3的解决方式,一直有问题。在想是不是js的缘故。不懂js.

所以采用了比较死的方法:

self.driver.find_element_by_xpath("//*[@id='select']/option[4]").click()
self.driver.implicitly_wait(5)

 

5.刚开始写完代码的时候,调试的时候老是报元素找不到,最后发现问题。
选中元素之后,没有点击。click()

 

posted @ 2019-07-17 15:09  eosclover  Views(320)  Comments(0Edit  收藏  举报