selenium自动化测试教程

当前支持诸如chrome,firefox,Edge,IE等主流浏览器,前提是要下载浏览器驱动(驱动下载地址上网自行百度),否则会报诸如以下此类的错误:

  • selenium.common.exceptions.WebDriverException: Message:
    ‘IEDriverServer.exe’ executable needs to be in PATH. Please download
    from http://selenium-release.storage.googleapis.com/index.html and
    read up at
    https://github.com/SeleniumHQ/selenium/wiki/InternetExplorerDriver复制代码

  • selenium.common.exceptions.WebDriverException: Message: ‘geckodriver’
    executable needs to be in PATH. 复制代码

  • selenium.common.exceptions.WebDriverException: Message:
    ‘chromedriver’ executable needs to be in PATH. Please see
    https://sites.google.com/a/chromium.org/chromedriver/home 复制代码

下载浏览器版本匹配的驱动后,放在python目录下的Scripts目录下即可。
在这里插入图片描述
3.完成以上步骤后,下面便可以调用使用浏览器了
取个简单的例子:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

if name == ‘main’:
driver = webdriver.Firefox()
driver.set_window_position(x=50,y=60)
driver.set_window_size(width=1366, height=700)
driver.get(“http://www.python.org”)
print driver.title
driver.close()
复制代码
简单介绍一下上面例子:

  • 首先实例化一个FireFox WebDriver对象。
  • 之后,driver.set_window_position方法来设置浏览器窗口的起始位置(就是浏览器左上角的坐标位置)
  • driver.set_window_size用来设置浏览器窗口的大小。
  • 重点的dirver.get()方法,用来导航到给定的url地址的网页。WebDriver
    将会等待直到页面全部加载完成后才会把控制权返回给脚本。
  • 最终,浏览器窗口关闭。当然,你也可以调用driver.quit()方法来结束浏览器调用,两个方法的不同之处在于,close()方法是关闭当期的浏览器窗口,而quit()方法是退出整个浏览器。

4.页面交互
要与页面进行交互,首先我们需要定位到某个元素,下面重点结束一下元素的定位方法。举个简单的例子:

复制代码
element = driver.find_element_by_id(“passwd-id”)
element = driver.find_element_by_name(“passwd”)
element = driver.find_element_by_xpath("//input[@id=‘passwd-id’]")
复制代码
以上三种方法都能定位到input元素。在webdriver中使用xpath方法时要格外小心。如果页面上有多个元素匹配到查询,只有第一个元素会被返回。如果没有匹配到任何东西,就会报NoSuchElementException的错误。

selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: //form[@class=‘search_index_box auto fix mt10’]/input[3]
复制代码
当然了,在webdriver中不仅仅是xpath方法找不到元素会报错,所有的方法在找不到给定元素的时候都会报错。比如:
river.get(“http://www.baidu.com”)
driver.find_element_by_id(‘zhanglinpeng’)
复制代码
selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: [id=“zhanglinpeng”]
复制代码

在webdriver中,支持的找元素的方法有:
find_element_by_id
find_element_by_name
find_element_by_xpath
find_element_by_link_text
find_element_by_partial_link_text
find_element_by_tag_name
find_element_by_class_name
find_element_by_css_selector
复制代码

接下来,我们逐个的对其进行介绍: 第一个,很简单,举个例子就可以很清楚的看明白了:
在这里插入图片描述
为了获取该元素,我们可以使用find_element_by_id方法。
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

if name == ‘main’:
driver = webdriver.Firefox()
driver.set_window_position(x=50, y=60)
driver.set_window_size(width=1366, height=700)
driver.get(“http://www.baidu.com”)
inputelement = driver.find_element_by_id(‘kw’)
print inputelement.get_attribute(‘maxlength’)
print driver.title
inputelement.send_keys(“selenium”)
driver.close()
复制代码

第二个,find_element_by_name
在这里插入图片描述
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

if name == ‘main’:
driver = webdriver.Firefox()
driver.set_window_position(x=50,y=60)
driver.set_window_size(width=1366, height=700)
driver.get(“http://www.jianshu.com/”)
inputelement = driver.find_element_by_name(‘q’)
# driver.find_element_by_xpath("//form[@class=‘search_index_box auto fix mt10’]/input[3]").send_keys()
inputelement.send_keys(‘selenium’)
driver.find_element_by_class_name(‘search-btn’).click()
driver.close()
复制代码

第三个,find_element_by_xpath,

复制代码

login_form = driver.find_element_by_xpath("/html/body/form[1]")
login_form = driver.find_element_by_xpath("//form[1]")
login_form = driver.find_element_by_xpath("//form[@id=‘loginForm’]")
复制代码

username=driver.find_element_by_xpath("//form[input/@name=‘username’]")
username = driver.find_element_by_xpath("//form[@id=‘loginForm’]/input[1]")
username = driver.find_element_by_xpath("//input[@name=‘username’]")
复制代码

clear_button = driver.find_element_by_xpath("//input[@name=‘continue’][@type=‘button’]")
clear_button = driver.find_element_by_xpath("//form[@id=‘loginForm’]/input[4]")
复制代码
上面的这些都是比较中规中矩的使用xpath方法,其实在实际使用中,可以结合实际情况,更加灵活地 使用,比如:
在这里插入图片描述
第四个,find_element_by_link_text 这个是在当你知道链接文本内容的时候可以使用。

Are you sure you want to do this?

Continue Cancel 复制代码

continue_link = driver.find_element_by_link_text(‘Continue’)
continue_link = driver.find_element_by_partial_link_text(‘Conti’)
复制代码

最后介绍一个find_element_by_tag_name 顾名思义就是使用标签名来找元素。
在这里插入图片描述
5.一些API接口使用

  • 首先介绍一下WebDriver: driver = webdriver.Firefox() 执行了该命令之后,实际上
    在这里插入图片描述
    在这里插入图片描述
    可以看出这个实例化的类实际上继承的是remote文件中的父类WebDriver,该类的具体介绍会在另一文档中具体介绍。 但是有一个属性函数需要着重介绍一下那就是: self._switch_to = SwitchTo(self)
    该类的两个方法经常使用到
    在这里插入图片描述
    在这里插入图片描述
    举例 driver.switch_to.window(driver.window_handles[-1])
    参数driver.window_handles是一个列表,包含当前session所有需要处理的窗口。 还有需要提到的是浏览器访问的当前和历史的转换
    在这里插入图片描述
  • 介绍一下ActionChains
  • 在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
举例:ActionChains(driver).move_to_element_with_offset(to_element=element, xoffset=loc+22 , yoffset=y - 445).perform()
复制代码
在这里插入图片描述
ActionChains(driver).release(on_element=element).perform()
复制代码

6.异常介绍
定位元素定位不到的时候,会报NoSuchElementException的错误 WebDriverWait(driver, 30).until(lambda the_driver: the_driver.find_element_by_xpath("//div[@class=‘gt_cut_bg gt_show’]/div").is_displayed()) 等待元素出现的时候,超时会报TimeoutException的错误 某元素在定位事,如果是临时出现,未定位到会报StaleElementReferenceException的错误。

在这里插入图片描述
解决此类问题的一个方案为:
serialnum = change_content_scriper(driver, count)
# print ‘000’,serialnum
attempt = 0
while attempt < 2:
try:
while ‘disabled’ not in driver.find_element_by_id(‘altInfo_next’).get_attribute(‘class’):
driver.find_element_by_id(‘altInfo_next’).click()
WebDriverWait(driver, 30).until(lambda the_driver: int(the_driver.find_element_by_id(‘altInfo’).find_element_by_xpath(".//tbody/tr[1]/td[1]").text)>serialnum)
serialnum = change_content_scriper(driver, count)
# print ‘111’,serialnum
break
except StaleElementReferenceException as e:
pass
attempt += 1
复制代码

自动化软件测试交流群:642830685,领取最新软件测试资料大厂面试和Python自动化学习资料!一起学习交流

如果对你有帮助!!留个赞呗!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值