selenium+python ui自动化测试01

selenium的简介:

selenium的四大体系:

(1)selenium IDE  (可以录制)

(2)selenium WebDriver

(3)selenium Grid (多台机器一起执行,分布式)

(4)selenium Remote Control(RC)   在selenium3.0及以上的版本中已删除该部分

可以录制自动化脚本的工具:Katalon Studio、selenium IDE 录制后可以生成各种语言的脚本代码

1)环境安装:

(1)安装selenium,如果用Pythong开发,最好使用pip install selenium命令来安装,安装之前当然要成功安装好Python

(2)安装浏览器的driver,两种方法:1)下载好各浏览器的driver,安装好以后,设置环境变量 2)安装好driver后,不设置环境变量在脚本中设置如:

self.driver=webdriver.Chrome(executable_path='page_object/driver/chromedriver.exe')

(3)启动特定版本的

 options=webdriver.ChromeOptions()
 options.binary_location="chrome path"
 self.driver=webdriver.Chrome(options=options)

2)元素定位:(web测试尽量使用css定位,利用父子关系,组合css等)

chrome的定位技巧,在console下可以执行两个特别 的函数

$x('xpath表达式')

eg:   1) $x("//*[contains(text(),'MTSC2020')]")

$('css表达式')

eg: 1)$('.toc-container .btn.btn-default')      说明:(.)表示class属性,空格表示class是父子关系,两个点表示两个class

2)css定位+额外属性:

 js定位:

document.getElementsByClassName("btn-default")

document.getElementById("main-navbar-collapse")

3)selenium中基本的api

forward

max

fullscreen

cookie

switch

execute_script:(不要忘记加return)

    def test_excute_script(self):
        raw=self.driver.execute_script("return JSON.stringify(window.performance.timing)") #打印出时间戳,比requests更详细,可以获取requests无法得到的一些内部时间,这个追踪整个浏览器内部的时间
        print(raw)
        print(json.loads(raw))
        print(json.dumps(json.loads(raw)))

execute:

    def test_execute(self):#调用新的api
        self.driver.execute("getXXX",params={"x":1,"y":2})

 4)selenium的几种启动模式:

(1)本地模式(传统模式)webdriver.Chrome

python testecase->chromedriver(本地有chromedriver)->启动chrome

代码实现:

self.driver=webdriver.Chrome("F:\\work\\xueqiu_app\\web\\tools\\chromedriver.exe")
self.driver=webdriver.Chrome() #把chromedriver配置到环境变量中

(2)远程模式(Remote)

python testcase->远程selenium server->调用chromedriver/iedriver/->启动chrome/ie

代码实现

1、启动selenium server(远程模式需要启动selenium-server-standation-3.141.59.jar这个jar包):

java -jar selenium-server-standation-3.141.59.jar -debug

2、代码实现:(#没有执行成功)

self.driver=webdriver.Remote(desired_capabilities=DesiredCapabilities.CHROME)
self.driver.implicitly_wait(10)
self.driver.get('https://testerhome.com/')

(3)grid模式

python testcase->grid hub/类似STF->grid node->selenium server->chromedriver/iedriver->chrome/ie

5)获取cookie

 def test_cookie(self):
        self.driver.get("https://testerhome.com/")
        print(self.driver.get_cookies())  #原始的cookie
        self.driver.add_cookie({"name":"a","value":"b"})
        self.driver.add_cookie({"name": "name", "value": "name demo"})
        print(self.driver.get_cookies())  #添加了值以后的cookie

追加cookie后的效果:

6)使用remote webdriver时报错:polling启动不起来,是因为Java1.8的一个bug,解决办法升级java1.8

7)雪球web搜索alibaba,添加股票:

 Basepage.py

#Basepage.py
from selenium.webdriver.remote.webdriver import WebDriver
class BasePage(object):

    def __init__(self,driver):
        self.driver:WebDriver=driver

 MainPage.py

#MainPage.py 导入的是类不是文件
from web.page_object.Basepage import  BasePage
from web.page_object.SearchPage import SearchPage
from time import sleep

class MainPage(BasePage):

    def search(self,keyword):
        self.driver.find_element_by_name("q").send_keys(keyword)
        self.driver.find_element_by_css_selector(".Header_nav__search_1YZ button").click()#注意这个搜索框在不同页面定位不同
        return SearchPage(self.driver)  #传递driver

SearchPage.py

from web.page_object.Basepage import BasePage

class SearchPage(BasePage):

    def follow(self,keyword):
        self.driver.find_element_by_xpath('//*[contains(text(),"%s")]/../../../..//*[@class="follow__control"]' %keyword).click()
        return self

测试用例:

from time import sleep
from selenium import webdriver
from web.page_object.MainPage import MainPage


class Testxueqiuweb(object):



    def setup(self):
        self.driver=webdriver.Chrome('F:\\work\\TPS_automation\\driver\\chromedriver.exe')
        self.driver.maximize_window()
        self.driver.implicitly_wait(10)
        self.driver.get('https://xueqiu.com/')
        self.main=MainPage(self.driver)

    def test_search(self):
        self.main.search('alibaba').follow('BABA')
       


    def teardown(self):
        sleep(60)
        self.driver.quit()

9)登录和注册的问题

登录验证码问题解决办法:

(1)验证码ocr可行,但是不稳定,而且不是正确的方向

(2)提高可测性 ,使用万能验证友,需要研发配合

(3)绕过登录直接使用cookie,就可以只需要登录一次,每次自动化都可以复用,一直持续到你退出登录cookie失效,一般是1个月才会变一次

(4)使用微博、QQ等第三方登录(一般没有验证码)

注册问题:

注册最大的难点不是自动化,其实在数据准备

使用mock中心,解除数据依赖

不断注册新用户,借助于运营部门批量删除测试账号

完全使用测试环境,在测试环境中提供删除用户的相关接口

(3)绕过登录直接使用cookie的实现方法:

 def test_profile(self):
        print(self.driver.get_cookies())
        self.driver.add_cookie({"name":"device_id","value":"24700f9f1986800ab4fcc880530dd0ed"})
        self.driver.add_cookie({"name": "u", "value": "291568878545474"})  #把cookie中的内容都放在里面
        self.driver.add_cookie({"name": "", "value": ""})
        self.driver.add_cookie({"name": "", "value": ""})
        self.driver.add_cookie({"name": "", "value": ""})
        print(self.driver.get_cookies())
        self.driver.refresh()
        self.driver.get('https://xueqiu.com/setting/user')

上面代码中cookie的来源:选中一个请示在console中输入document.cookie,不过这样只会显示一部分cookie不会显示全部的cookie

上图中cookie并不全,用下面的方法取cookie:

上面这样取出的cookie并不全,可以到个人设置页面中找到:

把上面这些cookie是通过第三方:QQ登陆后到个人设置页面看到的,把这些cookie增加到脚本中去就能绕开登陆:

10)脚本中打印日志:

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值