python selenium自动化(一)点击页面链接测试

原文网址:

https://www.cnblogs.com/harolei/p/3464403.html

python selenium自动化(一)点击页面链接测试

需求:现在有一个网站的页面,我希望用python自动化的测试点击这个页面上所有的在本窗口跳转,并且是本站内的链接,前往到链接页面之后在通过后退返回到原始页面。

要完成这个需求就必须实现3点:

1. 找到原始页面上面所有的在本窗口内跳转的链接

2. 跳转到目标页面之后,“后退”到原始页面

3. 在原始页面上继续点击后续的链接

首先,要找到页面上的所有链接并不困难。selenium为我们提供了find_elements_by_tag_name方法。我们只需要在初始化webdriver之后,调用

driver.find_elements_by_tag_name("a") 

就能找到页面上的所有a标签。

我们可以对所有的a标签进行点击,但是这样的话我们不能保证所有的a标签所指向的目标页面都是站内的,有可能目标是其他的站外网页;另外这样也不能保证该跳转页面是在本窗口跳转而不是新开一个窗口。

解决办法:

使用selenium.webdriver.remote.webelement.WebElement提供的get_attribute方法。

通过get_attribute拿到该a标签的各种属性,通过判断找到符合要求的元素进行点击。

get_attribute("href") 得到a标签对应的目标页面的URL,对URL进行判断就可以了解到该页面是否站内页面。我们可以知道,如果是站内页面的话这个属性一般会是一个相对路径,或者包含了本站域名,但如果是站外页面的话,那它一定是包含了“http”的一个url。

get_attribute("target")如果target不是"_blank"的话,可以判断该页面是在本窗口跳转的。

跳转到下一页面后如何返回原始页面呢?

selenium webdriver 提供了back方法可以轻松的达到这个目标:driver.back()

最后,需要在返回了原始页面之后继续点击下一个链接进行测试,这个不用说肯定要使用for loop:

for i in range(0, len(driver.find_elements_by_tag_name("a"))):

在python中,如果我们指定i在range(0, x)中循环时,会以1为步长来遍历从0到(x-1)的序列。例如:range(0,5)会得到[0, 1, 2, 3, 4]。当我们想更改range的步长时,则需要为range方法提供第三个参数。例如:range(0,5,2),则会以2为步长,得到[0,2,4]这个序列。

另外,我们也可以使用类似C#中foreach的方法:

for targetLink in driver.find_elements_by_tag_name("a"):

这种方法同样可以遍历所有的a标签集合中的所有元素。

如果使用第二种方法,我们觉得这个需求可以简单的实现为:

复制代码

links = driver.find_elements_by_tag_name("a")
for link in links:
     if not "_blank" in link.get_attribute("target") and ("google" in link.et_attribute("href") or not "http" in link.get_attribute("href")):
          link.click()
          driver.back()

复制代码

但是这样的实现在运行时会抛出异常:

selenium.common.exceptions.StaleElementReferenceException: Message: u'Element not found in the cache - perhaps the page has changed since it was looked up'

异常的说明已经很明显了:在cache中找不到元素,在元素被找到之后页面变换了。 这就说明,当当前页面发生跳转之后,存在cache中的关于这个页面的元素也被清空了。

因此,我们需要在每次回到原始页面之后对我们感兴趣的a标签元素重新搜索,同时我们又必须接着上次的点击到的元素继续点击。因此我们使用第一种遍历的方法来实现这个for loop:

复制代码

length = len(driver.find_elements_by_tag_name("a")

for i in range(0,length):
    links = driver.find_elements_by_tag_name("a")
    link = links[i]
    if not ("_blank" in link.get_attribute("target") or "http" in link.get_attribute("href")):
        link.click()
        driver.back()

复制代码

这样,在每次返回页面之后会重新搜索一遍页面上的a元素,然后使用cache中的i继续点击下一个跳转链接。

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python Selenium是一个方便易用的自动化测试库,它是Selenium WebDriver的Python语言封装。通过Python Selenium,开发者可以使用Python编写自动化测试代码,实现对网页的自动化操作。Python Selenium支持多种浏览器(如Chrome、Firefox、Edge等)和多个操作系统,可以模拟用户在浏览器中的各种行为,包括打开网页、查找元素、输入文本点击链接、提交表单、上传文件等。为了使用Python Selenium进行自动化测试,需要进行准备工作,包括安装Python 3和selenium库,并导入所需的浏览器驱动。比如,通过以下代码可以启动Fiefox浏览器并访问百度网站: from selenium import webdriver browser = webdriver.Firefox("E:\jnpx\soft\chromedriver.exe") browser.get('http://www.baidu.com/') 在进行自动化测试时,可以使用WebDriverWait来等待页面元素的加载,例如: from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "kw"))) 以上就是关于Python Selenium自动化测试的简介和准备工作的说明。使用Python Selenium可以轻松实现网页自动化测试的需求。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Python_Selenium自动化测试详细教程](https://blog.csdn.net/qq_45664055/article/details/128343454)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [自动化测试——Python+Selenium](https://blog.csdn.net/itxib/article/details/119609839)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值