【Python+Selenium学习系列3】Selenium元素定位实战

一、Selenium简述

Selenium是一个用于web应用程序的自动化测试工具。

Selenium直接运行在浏览器中,它可以模拟用户的行为操作。

Selenium支持IE、Google Chrome、Firefox、Opera等主流浏览器。

Selenium也支持主流开发语言,如Java、Python、C#等。

在Selenium中根据HTML页面元素的属性来定位。在web测试过程中常用的操作步骤如下:

(1) 定位网页上的页面元素,并获取元素对象;

(2) 对元素对象实施单击、双击、拖拽或输入值等操作;

二、Selenium结合浏览器实战

针对不同浏览器,需要下载的驱动程序不同。

以Firefox浏览器为例,

下载解压后,把geckodriver.exe文件放在Python安装程序的目录下。

很容易出现驱动程序(Driver)版本与Firefox浏览器不兼容的情况。

目前我能成功的环境为:

驱动:geckodriver-v0.24.0-win64.zip   浏览器:v58.0  

针对Firefox浏览器测试代码如下:

from selenium import webdriver
driver=webdriver.Firefox()
driver.get('http://www.baidu.com/')
driver.find_element_by_id('lst-ib').send_keys('Selenium')
driver.quit()

结果:

三、单个元素定位实战 

在Selenium自动化测试中,提供了单元素定位方式和多元素定位方式。

这里以百度搜索框的输入框为例:

1、find_element_by_id(通过元素id定位到元素)

from selenium import webdriver
driver=webdriver.Firefox()
driver.maximize_window()
driver.implicitly_wait(30)
driver.get('http://www.baidu.com')
driver.find_element_by_id('kw').send_keys('selenium')
driver.quit()

2、find_element_by_name(通过元素属性name定位到元素)

from selenium import webdriver
driver=webdriver.Firefox()
driver.maximize_window()
driver.implicitly_wait(30)
driver.get('http://www.baidu.com')
driver.find_element_by_name('wd').send_keys('selenium')
driver.quit()

3、find_element_by_class_name(通过元素属性class_name定位到元素)

from selenium import webdriver
driver=webdriver.Firefox()
driver.maximize_window()
driver.implicitly_wait(30)
driver.get('http://www.baidu.com')
driver.find_element_by_class_name('s_ipt').send_keys('selenium')
driver.quit()

4、find_element_by_xpath(通过元素属性xpath定位到元素)

from selenium import webdriver
driver=webdriver.Firefox()
driver.maximize_window()
driver.implicitly_wait(30)
driver.get('http://www.baidu.com')
driver.find_element_by_xpath('//*[@id="kw"]').send_keys('selenium')
driver.quit()

5、find_element_by_link_text(link_text对于超链接的处理)

from selenium import webdriver
driver=webdriver.Firefox()
driver.get('http://www.baidu.com')
driver.find_element_by_link_text(u'新闻').click()
driver.quit()

6、find_element_by_partial_link_text(partial_link_text也对于超链接的处理,与link_text不同的是,它是按模糊搜索方式处理的)

from selenium import webdriver
driver=webdriver.Firefox()
driver.maximize_window()
driver.implicitly_wait(30)
driver.get('http://www.baidu.com')
driver.find_element_by_partial_link_text(u'新闻').click()
driver.quit()

7、find_element_by_css_selector(当使用id、name等方式定位不到元素的时候,可以使用css_selector)

from selenium import webdriver
driver=webdriver.Firefox()
driver.maximize_window()
driver.implicitly_wait(30)
driver.get('http://www.baidu.com')
driver.find_element_by_css_selector('#kw').send_keys('Selenium')
driver.quit()

四、多个元素定位实战 

在工作中,某些时候可能会发现元素的ID、NAME、CLASS_NAME等元素属性是一致的,这时,使用ID、NAME、CLASS_NAME等这些元素属性定位就无法准确地定位到具体的元素。

1、find_elements_by_tag_name

from selenium import webdriver
driver=webdriver.Firefox()
driver.maximize_window()
driver.implicitly_wait(30)
driver.get('http://www.baidu.com')
tag_names=driver.find_elements_by_tag_name('input')
for tag_name in tag_names:
	print(tag_name)
print(type(tag_names))
driver.quit()

结果:

2、find_elements_by_id

index.html如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="success.html" method="post">
    <center>
        <p>用户名:<input type="text" id="login" name="username"></p>
        <p>密 码:<input type="text" id="login" name="password"></p>
        <p><input type="submit" id="login" value="登录"></p>
    </center>
</form>
</body>
</html>

Python代码:

from selenium import webdriver
driver=webdriver.Firefox()
driver.maximize_window()
driver.implicitly_wait(30)
driver.get('file:///F:/PythonProjects/MyTestingProjects/index.html')
ids=driver.find_element_by_id('login')
#输入用户名
ids[0].send_keys('wuya')
#输入密码
ids[1].send_keys('admin')
#点击“登录”按钮
ids[2].click()
driver.quit()

 效果:

四、By类的分析

五、iframe元素定位实战

在自动化测试中,如果无法定位到一个元素,那么最大的可能是定位的元素属性在iframe框架中。

1、处理未嵌套的iframe

frame.html如下: 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <center>
        <a href="frame-1.html" target="10">Yansky课堂</a>
        <a href="frame-2.html" target="10">Python接口测试实战</a><br><br>
    </center>
    <iframe id="text" src="frame-1.html" name="10-20" width="500" height="170" align="center">
    </iframe>
</body>
</html>

 frame-1.html如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
     <center>
         <font size="5">Yansky课堂</font><br><br>
     </center>
     Yansky课堂已经上线,欢迎大家关注!
</body>
</html>

frame-2.html如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <center>
        <font size="5">Python接口测试实战</font> <br><br>
    </center>
    基于Python的接口自动化测试实战课程
</body>
</html>

结果报错:

依据给出的错误信息可以发现这个错误是元素定位错误导致的。由于存在iframe框架,首先需要进入到iframe框架,再定位iframe框架中的元素。定位的方式有两种,一种是以ID定位,一种是以索引的方式。

①以ID的方式定位时的实现代码:

from selenium import webdriver
from selenium.webdriver.common.by import By

driver=webdriver.Firefox()
driver.maximize_window()
driver.implicitly_wait(30)
driver.get('file:///F:/PythonProjects/MyTestingProjects/frame.html')
#依据iframe的Id进入frame框架
driver.switch_to_frame('text')
#获取"Yansky课堂"文本信息
print(driver.find_element_by_xpath('/html/body/center/font').text)
driver.quit()

②以索引的方式进入到iframe框架中:

from selenium import webdriver
from selenium.webdriver.common.by import By

driver=webdriver.Firefox()
driver.maximize_window()
driver.implicitly_wait(30)
driver.get('file:///F:/PythonProjects/MyTestingProjects/frame.html')
#根据索引进入frame框架
driver.switch_to_frame(0)
#获取"Yansky课堂"文本信息
print(driver.find_element_by_xpath('/html/body/center/font').text)
driver.quit()

2、处理嵌套的iframe

下面来看看嵌套的iframe在自动化测试中如何进行元素定位,以及如何跳出嵌套。

在一个页面中嵌套一个Bing搜索页

<!DOCTYPE html>
<html lang="en">
<head>
    <meta http-equiv="content-type" content="text/html" charset="UTF-8"/>
    <title>嵌套页面</title>
</head>
<body>
    <iframe id="son" src="http://www.bing.com" width="800" height="400">
    </iframe>
</body>
</html>

在该页面中要实现Bing的搜索框效果,首先要进入到iframe框架中,然后定位Bing首页搜索输入框的元素属性。

实现在Bing首页搜索输入框中输入关键字代码如下:

from selenium import webdriver
from selenium.webdriver.common.by import By

driver=webdriver.Firefox()
driver.maximize_window()
driver.implicitly_wait(30)
driver.get('file:///F:/PythonProjects/MyTestingProjects/frame.html')
#根据索引进入frame框架
driver.switch_to_frame('son')
#输入搜索关键字Selenium
driver.find_element_by_id('sb_form_q').send_keys('Selenium')
driver.quit()

 下面是一个多层级的嵌套页面在自动化中的应用案例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta http-equiv="content-type" content="text/html" charset="UTF-8"/>
    <title>多层嵌套</title>
</head>
<body>
<center>
    <iframe id="parent" src="bing.html" width="1000" height="300">
    </iframe>
</center>
<hr>
<center>
    请输入用户名:<input type="text" id="userid" name="username" class="classname">
</center>
</body>
</html>

要想在Bing首页搜索输入框中输入搜索关键字Selenium,然后在下面的用户名输入框中输入Selenium,实现代码如下:

from selenium import webdriver
from selenium.webdriver.common.by import By

driver=webdriver.Firefox()
driver.maximize_window()
driver.implicitly_wait(60)
driver.get('file:///F:/PythonProjects/MyTestingProjects/second.html')
#根据id进入到第一层frame框架中
driver.switch_to_frame('parent')
#根据id进入到第二层frame框架中
driver.switch_to_frame('son')
#输入搜索关键字Selenium
driver.find_element_by_id('sb_form_q').send_keys('Selenium')
#跳出frame框架
driver.switch_to_default_content()
#用户名输入框中输入Selenium
driver.find_element_by_name('username').send_keys('Selenium')
driver.quit()

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要编写Python Selenium抢票脚本,你可以通过调用Selenium库中提供的API来模拟用户在网页上的操作。首先,你需要安装Selenium库。然后,你可以使用Selenium WebDriver驱动浏览器,打开目标网页并登录。之后,你可以使用find_element方法找到页面上的相关元素,如输入框和按钮,并使用send_keys方法输入信息或使用click方法单击按钮。还可以通过执行JavaScript脚本来操作滚动条,以便查看页面上的隐藏元素。例如,你可以使用下面的代码来编写抢票脚本: ```python from selenium import webdriver # 创建一个Chrome浏览器驱动 driver = webdriver.Chrome() # 打开目标网页 driver.get("http://example.com") # 找到输入框并输入信息 input_box = driver.find_element_by_id("input_box_id") input_box.send_keys("ticket info") # 找到按钮并单击 button = driver.find_element_by_id("button_id") button.click() # 执行JavaScript脚本来操作滚动条 driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") # 关闭浏览器驱动 driver.quit() ``` 请注意,具体的脚本编写还需要根据目标网页的结构和元素定位来进行调整。同时,为了避免对网站的恶意使用,请确保你使用脚本时遵守相关法律法规和网站的使用规定。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Python+Selenium自动化测试项目实战【建议收藏】](https://blog.csdn.net/m0_58026506/article/details/129559346)[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: 33.333333333333336%"] - *2* [selenium+python实现自动化登录的方法](https://download.csdn.net/download/weixin_38685538/13778524)[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: 33.333333333333336%"] - *3* [Python+Selenium自动化测试项目实战](https://blog.csdn.net/m0_67696270/article/details/130051199)[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: 33.333333333333336%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值