selenium框架中的元素定位

selenium框架中的元素定位

一、在学习如何对selenium框架中的页面元素进行定位前,先来了解一下什么是selenium。
Selenium,是一个开源的框架,主要用于做HTML页面的UI自动化测试。它支持多平台,多浏览器,多语言去实现自动化测试。框架图如下所示:
selenium框架中的元素定位_第1张图片
seleniumIDE是嵌入到Firefox浏览器中的一个插件,实现简单的浏览器操作的录制与回放功能。
seleniumGrid是一种自动化的测试辅助工具,利用它可以很方便地实现在多台机器上和异构环境中运行测试用例。
seleniumRC是selenium家族的核心,它支持多种不同语言编写的自动化测试脚本,通过seleniumRC的服务器作为代理服务器去访问应用,从而达到测试的目的。
seleniumRC分为Client Libraries和selenium Server。Client Libraries库主要用于编写测试脚本,用来控制selenium Server的库。selenium Server负载控制浏览器行为,总的来说,selenium Server主要包括三个部分:Launcher、Http Proxy和Core。其中Core是被selenium Server嵌入到浏览器页面中的,其实Core就是一堆javaScript函数的集合,即通过这些javaScript函数,我们才可以实现用程序对浏览器的操作。Launcher用于启动浏览器,把Core加载到浏览器页面当中,并把浏览器的代理设置为Http Proxy.
Selenium2.0=Selenium1.0+WebDriver
WebDriver可以看作是seleniumRC的替代品,它与浏览器紧密集成,因此支持创建更高级的测试。
这里我主要用WebDriver来定位页面元素。
WebDriver提供了一系列的对象定位方法,常见的的有以下8种:
1.driver.find_ element by name0一最常用, 简单
2.driver.find_ element by id0一最常用 .简单
3.driver.find
element. by. class name( )
4.driver.find_ element. by_ tag_ name()最不靠谱
5.driver.find_ element by. link text()定位文字连接好用
6.driver.find
element. by partial. link text)–定位文字连接好用
7.driver.find
element. Hy xpath0-最灵活 ,万能
8.driver.find
element. by_ css selector()–效率高、 万能
这里我以百度首页为例,为大家来演示在Pycharm中如何编写利用WebDriver定位页面元素自动化代码。
1.id定位

定位搜索条,定位到搜索条的id:
selenium框架中的元素定位_第2张图片
from selenium import webdriver # 导入webdriver
import pyautogui # 导入坐标定位类
import time # 导入时间模块,为了看清脚本步骤,需要加休眠时间
driver = webdriver.Chrome() # 打开浏览器,赋值给一个变量
driver.get(“http://www.baidu.com”) # get方法获取资源
driver.maximize_window() # 窗口最大化
time.sleep(2) # 强制休眠,为看下面的输入内容
driver.find_element_by_link_text(‘新闻’).click() # 点击文字链接
driver.find_element_by_id(“kw”).send_keys(‘Python程序’) # 输入内容,send_keys()方法为添加输入的内容
和上面同样的方法,定位百度一下的id
driver.find_element_by_id(“su”).click() # 点击搜索按钮,click()方法为提交功能和submit()方法一样。
driver.quit() # 退出相关驱动程序,并关闭所有窗口
driver.close() # 关闭当前一个窗口

2.坐标定位
此处的坐标值是我以我电脑屏幕左上角为基准,qq截屏截的。
from selenium import webdriver # 导入webdriver
import pyautogui # 导入坐标定位类
import time
driver = webdriver.Chrome()
driver.get(‘http://www.baidu.com’)
driver.maximize_window()
time.sleep(1)
driver.find_element_by_id(“kw”).send_keys(‘Python程序设计’)
time.sleep(3)
pyautogui.moveTo(721, 146, duration=2) # 实现坐标定位,duration持续时间
pyautogui.click() # 点击百度一下
pyautogui.moveTo(1360, 210, duration=2) #
pyautogui.scroll(-5000) # scroll()滚动鼠标
pyautogui.moveTo(665, 666, duration=2)
pyautogui.scroll(5000)

3.文字链接
driver.find_element_by_link_text(‘新闻’).click() # 点击文字链接,点击百度首页左上角的新闻链接

4.所有的页面元素都是在页面通过检查,来定位元素,不论是用以上8种方法中的哪一种。

from selenium import webdriver
import pyautogui
import time
driver = webdriver.Chrome() # 打开浏览器,赋值给一个变量
driver.get(“http://www.baidu.com”) # get方法获取资源
driver.maximize_window() # 窗口最大化
time.sleep(2) # 强制休眠,为看下面的输入内容

定位文字链接,可以模糊查询
driver.find_element_by_partial_link_text(‘31省区市’).click(’//*[@id=“kw”]’)
driver.close()

xpath定位:绝对路径定位
driver.find_element_by_xpath(r’html/body/div/div/div[5]/div[1]/div[1]/form/span/input’).send_keys(‘新冠’)

相对路径://表示当前页面的某个目录,input表示标签名,在页面复制的xpath是//*[@id=“kw”],在所有标签中查出,效率不是很高
driver.find_element_by_xpath(r’//input[@id=“kw”]’).send_keys(‘新冠’)
driver.find_element_by_xpath(’//input[@id=“su”]’).click()

使用class,name定位
driver.find_element_by_xpath(r’//input[@name=“wd”]’).send_keys(‘class’)
driver.find_element_by_xpath(r’//input[@class=“btn self-btn bg s_btn”]’).click()

层次与属性的结合,假如没有可利用属性值,我们可以查找上一级属性。
通过父元素去查找
driver.find_element_by_xpath(r’//form[@id=“form”]/span/input’).send_keys(‘父元素’)
driver.find_element_by_xpath(r’//form[@id=“form”]/span[2]/input’).click()

使用逻辑运算符,定位更准确
driver.find_element_by_xpath(r’//form[@id=“form” and @name=“f”]/span/input[@id=“kw” and @name=“wd”]’).send_keys(‘逻辑运算符’)

css的效果高于xpath

css定位:class属性定位:.=class
driver.find_element_by_css_selector(’.s_ipt’).send_keys(‘经济内循环2020’)
time.sleep(1)
使用id属性定位:#=id
driver.find_element_by_css_selector(’#su’).click()
通过标签名:寻找input标签,不准确,只做了解,一个页面input标签有多个
driver.find_element_by_css_selector(“input”).click()
通过父子关系定位
span>input,父元素为span,子元素为input的所有标签
driver.find_element_by_css_selector(“span>input”).send_keys(‘python程序设计’)
通过属性定位
driver.find_element_by_css_selector(’[name=“wd”]’).send_keys(‘我很丑可是我很温柔’)
driver.find_element_by_css_selector(’[type=“submit”]’).click()
组合定位
driver.find_element_by_css_selector(‘form.fm>span>input.s_ipt’).send_keys(‘python程序设计’)
driver.find_element_by_css_selector(‘form#form>span>input#kw’).send_keys(‘java程序设计’)
time.sleep(2)
driver.find_element_by_css_selector(‘span>input#su’).click()

5.by定位元素
driver.find_element(By.ID, “kw”).send_keys()
driver.find_element(By.NAME, ‘wd’)
设置浏览器大写(控制浏览器的大小)
driver.set_window_size(400, 800)
time.sleep(2)

浏览器前进和后退:
url2 = ‘http://news.baidu.com’
#driver.find_element_by_link_text(‘新闻’).click()
driver.get(url2)

time.sleep(10)
#返回百度首页
driver.back()
time.sleep(10)
#前进到新闻页面
driver.forward()
#刷新当前页面(类似于F5)
driver.refresh()

获取输入框的尺寸
s = driver.find_element_by_id(“kw”).size
print(s)
返回百度底部的备案信息
s1 = driver.find_element_by_xpath(’//*[@id=“s-bottom-layer-right”/a/span]’).text
print(s1)
text = driver.find_element_by_id(“virus-2020”).text
print(text)
#返回元素的属性值,可以是id,name,type或者其他属性
#get_attribute(name):获取元素的属性值
a = driver.find_element_by_id(‘kw’).get_attribute(‘name’)
print(a)
#is_dispplayed:设置元素是否为用户可见
b = driver.find_element_by_id(‘kw’).is_displayed()
print(b)

以上代码包含了这8种定位页面元素的方法,其实不难,要熟练记住这些方法,还得多敲多练习。

你可能感兴趣的:(web自动化)