avatar

目录
UI自动化之selenium

一、selenium

1、selenium是python中的一个第三方库(本文示范3.141.0版本)
2、通过python中的webdriver+selenium进行二次封装的库selenium2
3、特点:免费、安装简单、支持多语言、多平台、多浏览器
4、selenium安装:两种方式
(1)dos中下载
pip install selenium==3.141.0
(2)在pycahrm中setting中的解释器Project Interpreter下点击+号下载
5、安装浏览器驱动
浏览器+对应版本的驱动
将驱动放到python下

存放的路径python路径下

E:\python37\Scripts
对应版本镜像链接1: http://chromedriver.storage.googleapis.com/index.html
对应版本镜像链接2: https://registry.npmmirror.com/binary.html?path=chromedriver/
谷歌下载低版本:https://downzen.com/en/windows/google-chrome/versions/
调试代码:

python
1
2
3
4
5
6
7
from  selenium  import  webdriver  #导入selenium这个模块中webdriver
import time
dx=webdriver.Chrome() #创建一个webdriver对象
dx.get("https://www.baidu.com/") #通过对象调用get打开百度
dx.maximize_window() #窗口最大化
time.sleep(2) #休眠2s
dx.find_element_by_id("kw").send_keys(u"杭州") #通过id定位,输入杭州

​如果报错:检查urllib3版本号,将urllib3版本降低即可。

二、常用语句

1、打开浏览器 (get)
案例1:打开一个浏览器

python
1
2
3
4
from  selenium  import  webdriver  #导入selenium这个模块中webdriver
import time
dx=webdriver.Chrome() #创建一个webdriver对象
dx.get("https://www.baidu.com/") #通过对象调用get打开百度

案例2:打开两个网址(覆盖)

python
1
2
3
4
5
6
from  selenium  import  webdriver  #导入selenium这个模块中webdriver
import time
dx=webdriver.Chrome() #创建一个webdriver对象
dx.get("https://www.baidu.com/") #通过对象调用get打开百度
time.sleep(2)
dx.get("https://www.jd.com/")

案例3:打开两个网址(重开窗口)

python
1
2
3
4
5
import  time
dx=webdriver.Chrome() #创建一个webdriver对象
dx.get("https://www.baidu.com/") #通过对象调用get打开百度time.sleep(2)
w="window.open('https://www.jd.com/')"
dx.execute_script(w)

2、时间等待
(1)强制等待(不管能不能查找元素,都要等待规定的时间)sleep
案例:

python
1
2
3
4
5
6
from  selenium  import  webdriver  #导入selenium这个模块中webdriver
import time
dx=webdriver.Chrome() #创建一个webdriver对象
dx.get("https://www.baidu.com/") #通过对象调用get打开百度
time.sleep(1)
dx.get("https://www.baidu.com/")

(2)隐式等待(所在规定范围等待时间,如果提前找到元素,就节省时间)
语句:implicitly_wait
案例:

python
1
2
3
4
5
6
from  selenium  import  webdriver  #导入selenium这个模块中webdriver
import time
dx=webdriver.Chrome() #创建一个webdriver对象
dx.get("https://www.baidu.com/") #通过对象调用get打开百度
dx.implicitly_wait(10)
dx.get("https://www.baidu.com/")

(3)显性等待(等待元素出现后,在进行下一步操作)
显性等待,WebDriverWait,配合该类的until()和until_not()方法,就能够根据判断条件而进行灵活地等待了.它主要的意思就是:程序每隔x秒看一眼,如果条件成立了,则执行下一步,否则继续等待,直到超过设置的最长时间,然后抛出TimeoutException

python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

# 会开会话
driver = webdriver.Chrome()
driver.get('http://www.baidu.com')

driver.find_element_by_id('kw').send_keys('selenium')
driver.find_element_by_id('su').click()

# 显性等待
WebDriverWait(driver,20).until(EC.visibility_of_element_located((By.XPATH, '//em[text()="selenium"]')))
driver.find_element_by_xpath('//em[text()="selenium"]').click()

print(driver.current_url)
driver.quit()

我们设置了隐性等待和显性等待,在其他操作中,隐性等待起决定性作用,在WebDriverWait中显性等待起主要作用,但要注意的是:最长的等待时间取决于两者之间的大者,此例中为20,如果隐性等待时间>显性等待时间,则该句代码的最长等待时间等于隐性等待时间
3、refresh()刷新
语句:

python
1
2
3
4
5
6
from  selenium  import  webdriver  #导入selenium这个模块中webdriver
import time
dx=webdriver.Chrome() #创建一个webdriver对象
dx.get("https://www.baidu.com/") #通过对象调用get打开百度
time.sleep(3)
dx.refresh() #刷新

4、back 返回上一页

python
1
2
3
4
5
6
7
8
from  selenium  import  webdriver  #导入selenium这个模块中webdriver
import time
dx=webdriver.Chrome() #创建一个webdriver对象
dx.get("https://www.baidu.com/") #通过对象调用get打开百度
time.sleep(3)
dx.get("https://www.jd.com/")
time.sleep(3)
dx.back() #返回上一页

5、forward切换到下一页

python
1
2
3
4
5
6
7
8
9
10
from  selenium  import  webdriver  #导入selenium这个模块中webdriver
import time
dx=webdriver.Chrome() #创建一个webdriver对象
dx.get("https://www.baidu.com/") #通过对象调用get打开百度
time.sleep(3)
dx.get("https://www.jd.com/")
time.sleep(3)
dx.back() #返回上一页
time.sleep(3)
dx.forward() # 切换到下一页

6、set_window_size设置页面窗口大小

python
1
2
3
4
5
6
from  selenium  import  webdriver  #导入selenium这个模块中webdriver
import time
dx=webdriver.Chrome() #创建一个webdriver对象
dx.get("https://www.baidu.com/") #通过对象调用get打开百度
time.sleep(3)
dx.set_window_size(200,200)

7、maximize_window() 窗口最大化

python
1
2
3
4
5
6
from  selenium  import  webdriver  #导入selenium这个模块中webdriver
import time
dx=webdriver.Chrome() #创建一个webdriver对象
dx.get("https://www.baidu.com/") #通过对象调用get打开百度
time.sleep(3)
dx.maximize_window() #窗口最大化

8、get_screenshot_as_file 截屏

python
1
2
3
4
5
6
from  selenium  import  webdriver  #导入selenium这个模块中webdriver
import time
dx=webdriver.Chrome() #创建一个webdriver对象
dx.get("https://www.baidu.com/") #通过对象调用get打开百度
time.sleep(3)
dx.get_screenshot_as_file(r"E:\ls\cd\bd.png")

9、close 关闭当前窗口

python
1
2
3
4
5
6
7
8
9
10
11
from  selenium  import  webdriver  #导入selenium这个模块中webdriver
import time
dx=webdriver.Chrome() #创建一个webdriver对象
dx.get("https://www.baidu.com/") #通过对象调用get打开百度
print(dx.title) #查看标题
time.sleep(3)
w="window.open('https://www.jd.com/')"
dx.execute_script(w)
print(dx.title) #查看标题
time.sleep(2)
dx.close() # 关闭当前窗口

10、quit 关闭所有的窗口

python
1
2
3
4
5
6
7
8
9
10
11
from  selenium  import  webdriver  #导入selenium这个模块中webdriver
import time
dx=webdriver.Chrome() #创建一个webdriver对象
dx.get("https://www.baidu.com/") #通过对象调用get打开百度
print(dx.title) #查看标题
time.sleep(3)
w="window.open('https://www.jd.com/')"
dx.execute_script(w)
print(dx.title) #查看标题
time.sleep(2)
dx.quit() #关闭所有的窗口

11、打印当前的抬头

python
1
2
3
4
5
6
7
8
9
10
from  selenium  import  webdriver  #导入selenium这个模块中webdriver
import time
dx=webdriver.Chrome() #创建一个webdriver对象
dx.get("https://www.baidu.com/") #通过对象调用get打开百度
print(dx.title) #查看标题
time.sleep(3)
w="window.open('https://www.jd.com/')"
dx.execute_script(w)
print(dx.title) #查看标题
time.sleep(2)

三、定位元素

1、查看元素的属性:
通过f12+fn 或f12 或者开发工具

2、定位元素:
id、name、class、xpath、css、link_text、partial_link_text、tag_name
根据基属性进行定位
3、定位实战
①id定位

python
1
2
3
4
5
6
7
from   selenium  import  webdriver
from time import *
dx=webdriver.Chrome()
dx.get("https://www.baidu.com/")
sleep(2)
dx.maximize_window()
dx.find_element_by_id("kw").send_keys("id定位")

②name定位

python
1
2
3
4
5
6
7
from   selenium  import  webdriver
from time import *
dx=webdriver.Chrome()
dx.get("https://www.baidu.com/")
sleep(2)
dx.maximize_window()
dx.find_element_by_name("wd").send_keys("name定位")

③class定位

python
1
2
3
4
5
6
7
from  selenium  import  webdriver
from time import *
dx=webdriver.Chrome()
dx.get("https://www.baidu.com/")
sleep(2)
dx.maximize_window()
dx.find_element_by_class_name("s_ipt").send_keys("class定位")

④link_text 链接定位

python
1
2
3
4
5
6
7
from  selenium  import  webdriver
from time import *
dx=webdriver.Chrome()
dx.get("https://www.baidu.com/")
sleep(2)
dx.maximize_window()
dx.find_element_by_link_text("hao123").click()

⑤ind_element_by_partial_link_text 模糊匹配

python
1
2
3
4
5
6
7
from   selenium  import  webdriver
from time import *
dx=webdriver.Chrome()
dx.get("https://www.baidu.com/")
sleep(2)
dx.maximize_window()
dx.find_element_by_partial_link_text("hao").click()

⑥xpath定位
复制的xpath://*[@id=”kw”]

python
1
2
3
4
5
6
7
from   selenium  import  webdriver
from time import *
dx=webdriver.Chrome()
dx.get("https://www.baidu.com/")
sleep(2)
dx.maximize_window()
dx.find_element_by_xpath('//*[@id="kw"]').send_keys("xpath定位")

⑦css定位
复制css :#kw

python
1
2
3
4
5
6
7
from   selenium  import  webdriver
from time import *
dx=webdriver.Chrome()
dx.get("https://www.baidu.com/")
sleep(2)
dx.maximize_window()
dx.find_element_by_css_selector("#kw").send_keys("css定位方法")

⑧js定位方法

python
1
2
3
4
5
6
7
8
from   selenium  import  webdriver
from time import *
dx=webdriver.Chrome()
dx.get("https://www.baidu.com/")
sleep(2)
dx.maximize_window()
js="document.getElementById('kw').value='js定位'"
dx.execute_script(js)

⑨tag_name 标签名称定位

python
1
2
3
4
5
6
7
8
9
10
from   selenium  import  webdriver
from time import *
dx=webdriver.Chrome()
dx.get("https://www.baidu.com/")
sleep(2)
dx.maximize_window()
inputs=dx.find_elements_by_tag_name("input")
for i in inputs:
if i.get_attribute("name")=="wd":
i.send_keys("tag_name定位")

文章作者: J.M.
文章链接: https://www.masj.top/post/a10a1a1f.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Jason的小世界