selenium-1

UI自动化测试

一、元素定位

 先导入 webdriver
from selenium import webdriver
import time as t  

实例化webdriver,指要测试的浏览器

driver=webdriver.Chrome()

打开浏览器后导航到百度 即域名

driver.get('http://www.baidu.com')

send keys 输入的方法(通过ID的属性定位到百度的输入框,并输入搜索的关键字)

driver.find_element_by_id('kw').send_keys('高考成绩')

休眠 指网页停留多少秒

t.sleep(2)

退出浏览器

driver.quit()

 

 在selenium框架中,操作元素定位使用的类是By,元素定位方法有8种,分别是:

ID = "id"

NAME = "name"

XPATH = "xpath"

LINK_TEXT = "link text"

PARTIAL_LINK_TEXT = "partial link text"

TAG_NAME = "tag name"

CLASS_NAME = "class name"

CSS_SELECTOR = "css selector"

1.1定位元素 id

方法一:

driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.find_element_by_id('kw').send_keys('高考成绩')
t.sleep(2)
driver.quit()

 

 

 方法二:

from selenium.webdriver.common.by import By 先导入By
driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.find_element(By.ID,"kw").send_keys('高考成绩')
t.sleep(2)
driver.quit()

 

  

1.2定位元素:name

方法一:

driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.find_element_by_name('wd').send_keys('高考成绩')
t.sleep(2)
driver.quit()

 

 方法二:

from selenium.webdriver.common.by import By 先导入By
driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.find_element(By.NAME,"wd").send_keys('高考成绩')
t.sleep(2)
driver.quit()

 

 

 1.3定位元素 class_name

方法一:

from selenium.webdriver.common.by import By 先导入By
driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.find_element(By.NAME,"wd").send_keys('高考成绩')
t.sleep(2)
driver.quit()

 

 

 方法二:

from selenium.webdriver.common.by import By 先导入By
driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.find_element(By.CLASS_NAME,"s_ipt").send_keys('高考成绩')
t.sleep(2)
driver.quit()

 

 

当一个元素使用ID,name,class_name定位不到的时候,使用css(基于样式)和xpath(基于路径)

1.4定位元素 css(css selector) (找css 先点击copy选selector 自动复制)

driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.find_element_by_css_selector("#kw").send_keys('高考成绩')
t.sleep(3)
driver.quit()

 

 

 1.5定位元素:xpath 点击copy选xpath 自动复制

driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.find_element_by_xpath('//*[@id="kw"]').send_keys('高考成绩')   注意:有双引号的数据要用单引号

t.sleep(3)
driver.quit()

 

 

 1.6定位元素:full xpath 点击copy选full xpath 自动复制

driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.find_element_by_xpath('/html/body/div[1]/div[2]/div[5]/div[1]/div/form/span[1]/input').send_keys('高考成绩')
t.sleep(2)
driver.quit()

 

 

1.7定位元素 超链接(partial link text)

标签里都是超链接。

1.7.1 LINK_TEXT:超链接

比如点击百度首页图片会调到第二个网页图片

driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.find_element_by_link_text("图片").click()
t.sleep(10)
driver.quit()

 

 

1.7.2PARTIAL_LINK_TEXT:也是处理超链接,但是是模糊搜索

比如超链接搜索高考,会跳到第二个页面显示被搜索的高考页面

driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.find_element_by_partial_link_text("高考").click()
t.sleep(5)
driver.quit()

 

 

 

元素定位从分类上而言: 1、单个元素定位 2、多个元素定位(元素属性都一致) A、获取到的元素属性,它是一个列表 B、按照我们需要被定位的元素属性,它在列表中是第几位,那么 就使用它的索引来定位

 

1.8多元素定位:tag_name

多元素定位的element需要带s,多个元素定位返回的列表,定义为变量tags,然后根据索引tags[ ]来查找列表中我们需要的input元素。(我们定位的百度搜索输入框的input是在第八位,索引就是7)

 

 

driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
input=driver.find_elements_by_tag_name("input")
input[7].send_keys("selenium")
t.sleep(20)
driver.quit()

 

 

 实战12306网站

driver=webdriver.Chrome()
driver.get('https://www.12306.cn/index/')
driver.find_element_by_xpath('//*[@id="fromStationText"]').send_keys('西安')
t.sleep(3)
driver.find_element_by_xpath('//*[@id="toStationText"]').send_keys('武汉')
t.sleep(3)
driver.find_element_by_xpath('//*[@id="toStationText"]').click()
t.sleep(3)
driver.quit()

 

 

二、iframe

遇到iframe解决步骤:

1、先进入到iFrame的框架

(如果frame有多层,需要一层层进入。进入的方法有三种)

2、然后再定位框架里面的元素属性

 

进入iframe框架三种方式

1、通过ID

2、通过索引 (使用索引进入框架时,需要注意索引是同层级中我们的目标iframe的索引,不要跨级去看索引了)

3、通过name(基本不使用)

比如进入iframe框架通过ID元素定位

driver=webdriver.Chrome()
driver.get('https://mail.qq.com/')
# 进入iframe框架
driver.switch_to.frame
t.sleep(3)
driver.find_element(By.ID,"gsdf").send_keys('397479340@qq.com')
t.sleep(3)
driver.quit()

 

 

三、超链接名称登录

1.打开淘宝登录网页

2.超链接代码输入登录

3.打开淘宝登录网页 定位name元素

driver=webdriver.Chrome()
driver.get('http://www.taobao.com')
driver.find_element(By.LINK_TEXT,"登录").click()
t.sleep()
driver.find_element(By.NAME,"fm-login-id").send_keys("admin")
t.sleep(3)
driver.quit()

 

 

 

 

 四、获取测试地址

driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
print(driver.current_url)
print(driver.page_source)
'''获取当前的title'''
print(driver.title)
driver.quit()

 

 

五、获取前进与后退

driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
t.sleep(2)
driver.get('http://www.baidu.com')
t.sleep(2)
# .back()后退
driver.back()
print(driver.current_url)
t.sleep(2)
# .forward()前进
driver.forward()
print(driver.current_url)
driver.quit()

 

 

多窗口处理

需要实现从当前页面切换到另外一个新的页面,就需要使用到多窗口的操作和实战。解决步骤:

1、先打开当前页面

2、然后获取当前页面放在一个变量中 current_window_handle

3、打开新的页面

4、获取所有页面并且放在一个变量中 window_handles

5、循环所有页面,判断如果不是当前页面,那么就切换到新的页面 switch_to.window(xxx)

driver=webdriver.Chrome()
# 登录新浪邮箱
driver.get('https://mail.sina.com.cn/')
# 获取当前页面放在一个变量
nowHandler=driver.current_window_handle
t.sleep(2)
# 新浪邮箱注册页面
driver.find_element(By.LINK_TEXT,"注册").click()
t.sleep(2)
# 获取所有页面放在一个变量
allHandler=driver.window_handles
# 循环所有页面,判断如果不是当前页面,就是在新的页面
for aa in allHandler:
if aa!=nowHandler:
# 切换到新窗口
driver.switch_to.window(aa)
driver.find_element(By.NAME,"email").send_keys("affd")
t.sleep(2)
# 关闭浏览器
driver.close()
t.sleep(2)
# 切换到原来页面
driver.switch_to.window(nowHandler)
driver.find_element(By.ID,"freename").send_keys("sfadsdfbg")
t.sleep(3)
driver.quit()

 

 

posted @ 2022-06-27 18:33  Yvonne_26J  阅读(61)  评论(0)    收藏  举报