python selenium自动化(二)自动化注册流程

需求:使用python selenium来自动测试一个网站注册的流程。

假设这个网站的注册流程分为三步,需要提供比较多的信息: 

在这个流程里面,需要用户填入信息、在下拉菜单中选择、选择单选的radio button、多选框等等比较复杂的页面元素操作。

在开始做的时候,我会按照一个用户真正的填写习惯,参照页面,一步步的定义每个步骤应该进行怎样的操作,我需要查看每一个页面元素的属性,决定选择一个合理的选项,然后再用代码自动化这样的操作。但是反思一下,其实这样的实现方法并不符合一个计算机自动测试的习惯,也浪费了许多时间在手动的寻找页面元素的相关属性和合理操作值上。

所谓的自动化,就是要机器在最大程度上的去代替人进行某些操作。而只有在程序自己没有办法判断如何操作的时候,我们才为这类操作定义更详细的规定。例如:从计算机的角度,并不需要关心radio button要选择的是male或是female,也不关心下拉菜单中我们要选择的具体的值是什么;它只需要确保radio button和下拉菜单中可以顺利的选择到一个元素。因此,在这个注册流程中,我可以简单的定义找到页面上所有的radio button,然后挨个把它们都点击一遍,这样既能保证每个radio button都被点击事件测试过,也能保证在注册流程中必定有一个选项被选中了。同样的,我可以定义对每个下拉菜单都选择第一个字值。这样的general的方法,可以把我从对每个元素都要找到它的属性然后对其指定详细的操作的辛苦中一次性的解放出来:

def click_radio_btn(driver):
    radioBtns = driver.find_elements_by_xpath("//input[@type='radio']")
    for radioBtn in radioBtns:
        if radioBtn.is_displayed():
            radioBtn.click()        

这里我多进行了一次radioBtn.is_displayed()的判断,原因是在我的流程中有的radio button是在选择了某些特定选项之后才会显示在页面上的,因此对于没有显示的元素就不必进行点击操作,否则会抛出异常:

selenium.common.exceptions.ElementNotVisibleException: Message: u'element not visible  

而对于需要填入具体信息的input field来说,我们就必须要给出具体每个输入框的输入值来告诉程序如何处理这些元素了。

在这个这个注册流程中,address的下拉菜单中市的选项是基于省份的选值的。这里有一个ajax的异步调用,当用户选择了一个省份之后才会对市下拉单中的值进行加载。于是问题出现了:由于网络的原因,加载市的值的速度是不一定的,有时也许在执行对市的下拉菜单进行选值的时候其中的值其实还没有加载完成。这时,虽然我们选择的是第一个选项,还是会抛出异常:

selenium.common.exceptions.NoSuchElementException: Message: 'Could not locate element with index 1'

这种情况的解决办法是:使用selenium.webdriver.support.ui.WebDriverWait提供的until来使webdriver等待到指定的条件满足或是规定的timeout time到期:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Firefox()
driver.get("http://www.zhuce.com")

city = WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.NAME,"city")))
Select(city).select_by_index(1)

这样,webdriver将会等待name为“city”的元素enable了之后才算找到该元素,并继续进行接下来的点击操作。如果在10秒内该元素都没有加载成功的话,才抛出异常:

raise TimeoutException(message)
selenium.common.exceptions.TimeoutException: Message: ''

python selenium中提供了多种元素等待的条件:

title_is title_contains 
presence_of_element_located 
visibility_of_element_located 
visibility_of 
presence_of_all_elements_located 
text_to_be_present_in_element 
text_to_be_present_in_element_value frame_to_be_available_and_switch_to_it 
invisibility_of_element_located 
element_to_be_clickable #it is Displayed and Enabled. 
staleness_of 
element_to_be_selected 
element_located_to_be_selected 
element_selection_state_to_be 
element_located_selection_state_to_be alert_is_present

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Python Selenium 自动化测试流程一般包括以下几个步骤: 1. 安装 PythonSelenium 库:在开始之前,需要确保你已经安装了 PythonSelenium 库。你可以通过 pip 命令来安装 Selenium 库,如下所示: ``` pip install selenium ``` 2. 创建 WebDriver 实例:WebDriver 是 Selenium 的核心组件之一,它可以模拟用户在浏览器上的操作。在 Python 中,你可以通过以下代码来创建 WebDriver 实例: ``` from selenium import webdriver # 创建 Chrome WebDriver 实例 driver = webdriver.Chrome() ``` 3. 打开网页:使用 WebDriver 实例的 `get()` 方法可以打开指定的网页,代码如下: ``` # 打开百度首页 driver.get("https://www.baidu.com") ``` 4. 查找网页元素:在自动化测试中,需要通过网页元素来模拟用户的操作。Selenium 提供了多种方法来查找网页元素,比如 `find_element_by_id()`、`find_element_by_name()`、`find_element_by_xpath()` 等等。例如,下面的代码可以查找百度搜索框: ``` # 查找百度搜索框 search_box = driver.find_element_by_id("kw") ``` 5. 操作网页元素:找到网页元素后,就可以对它们进行操作了。比如,你可以使用 `send_keys()` 方法向输入框中输入文本,使用 `click()` 方法模拟点击操作。例如,下面的代码可以在百度搜索框中输入文本并点击搜索按钮: ``` # 在搜索框中输入文本 search_box.send_keys("Selenium") # 点击搜索按钮 search_button = driver.find_element_by_id("su") search_button.click() ``` 6. 断言测试结果:在自动化测试中,需要对测试结果进行断言,以确保程序的正确性。比如,你可以使用 `assert` 语句来判断是否得到了正确的搜索结果。例如,下面的代码可以判断搜索结果中是否包含指定的关键字: ``` # 断言搜索结果中是否包含指定的关键字 assert "Selenium" in driver.page_source ``` 7. 关闭浏览器:测试完成后,需要关闭浏览器,释放资源。可以使用 `close()` 方法关闭当前窗口,或者使用 `quit()` 方法关闭整个浏览器。例如: ``` # 关闭浏览器 driver.quit() ``` 这些步骤构成了 Python Selenium 自动化测试的基本流程。当然,在实际应用中,还需要考虑很多其他的因素,比如测试数据的准备、异常处理等等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zzzzl333

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值