前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python:Selenium 2:使用

Python:Selenium 2:使用

作者头像
丹枫无迹
发布2019-09-11 19:30:03
2K0
发布2019-09-11 19:30:03
举报
文章被收录于专栏:学无止境学无止境

创建一个浏览器对象

代码语言:javascript
复制
from selenium import webdriver
browser = webdriver.Chrome()

WebDriver在将控制权返回给测试脚本之前,会一直等待到页面完全加载完毕,但如果页面使用了很多AJAX,WebDriver可能无法准确判断页面是否完全加载。

打开页面

代码语言:javascript
复制
browser.get("https://www.baidu.com")

不能省略http:// 或 https://

获取页面源码

代码语言:javascript
复制
html = browser.page_source

定位HTML元素

定位一个元素

含义

find_element_by_tag_name

通过标签定位

find_element_by_id

通过元素id定位

find_element_by_name

通过元素name定位

find_element_by_class_name

通过类名进行定位

find_element_by_css_selector

通过css选择器进行定位

find_element_by_xpath

通过xpath表达式定位(xpath和xml中的类似)

find_element_by_link_text

通过完整超链接文本定位(不是通过超链接的地址,而是超链接上面的文字描述)

find_element_by_partial_link_text

通过部分链接定位

如果没有发现任何元素,将会抛出NoSuchElementException异常。

以上的方法仅返回第一个满足条件的元素,如果要返回多个元素,需要使用find_elements_by_xx。

输入文本

代码语言:javascript
复制
element.send_keys("selenium")

你输入的字符将会被添加在已有文本之后。如果传入多个文本,将依次添加。

在输入框中输入的字符不会自动清空,你可以使用clear方法输入区域的内容。

代码语言:javascript
复制
element.Clear()

快捷键

代码语言:javascript
复制
from selenium.webdriver.common.keys import Keys
element.send_keys(Keys.BACKSPACE)    # 删除键
element.send_keys(keys.ENTER)        # 回车键
element.send_keys(Keys.SPACE)        # 空格键
element.send_keys(Keys.CONTROL, 'a')    # Ctrl+A
element.send_keys(Keys.CONTROL, 'c')    # Ctrl+C

点击按钮

代码语言:javascript
复制
element.click()

定位下拉框(select)

方法一:先定位select,再定位option选项。

代码语言:javascript
复制
browser.find_element_by_id("sel").find_element_by_xpath("//option[@value='晴']").click()

方法二:直接xpath定位。

代码语言:javascript
复制
browser.find_element_by_xpath("//*[@id='sel']/option[3]").click()

方法三:select模块定位

代码语言:javascript
复制
from selenium.webdriver.support.select import Select
element = browser.find_element_by_id("sel")
Select(element).select_by_index(2).click() # index 从0开始
Select(element).select_by_value('晴')
Select(element).select_by_visible_text('雨')

用Select定位后会直接选中不需要click()方法选中,也没有click()方法。

Select中的其他方法如下:

代码语言:javascript
复制
deselect_all() # 取消所有选项
deselect_by_index() # 取消对应 index 选项
deselect_by_value() # 取消对应 value 选项
deselect_by_visible_text() # 取消对应文本选项

以上方法需要select支持多选(multiple="true")

单选框(radio)复选框(checkbox)

代码语言:javascript
复制
element = browser.find_element_by_id('yes')
element.click()

就是定位HTML元素,没啥花样。

判断是否选中

代码语言:javascript
复制
browser.find_element_by_id('yes').is_selected()

判断是否可见

有些元素设置了display:none,这时候如果直接操作这种隐藏的元素,会报错:element not visible。

代码语言:javascript
复制
element.is_displayed()

定位弹框

1、alert弹框

代码语言:javascript
复制
alertElement = browser.switch_to_alert()
print(alertElement.text) # 获取对话框文本值
alertElement.accept() # 点击确认按钮

在现在的版本中,browser.switch_to_alert()已经过时了,

改成:alertElement = browser.switch_to.alert

2、confirm弹框

confirm 和 alert 是一样的,只是多了个点击取消按钮的方法。

代码语言:javascript
复制
confirmElement = browser.switch_to.alert
print(confirmElement.text) # 获取对话框文本值
confirmElement.dismiss() # 点击取消按钮

3、prompt弹框

代码语言:javascript
复制
prompt 又多了个输入框,send_keys 方法即可。

执行JS

代码语言:javascript
复制
js = "$('#sp').toggle();"
browser.execute_script(js)

退出

代码语言:javascript
复制
browser.quit()

示例:

为了测试,我们新建一个htnl网页

代码语言:javascript
复制
<html>
<head>
<title>SeleniumTest</title>
<script src="Scripts/jquery-1.10.2.min.js" type="text/javascript"></script>

<style type="text/css">
tr{
height: 40px}
</style>
</head>
<body>
<table style="margin: 200px auto;">
<tr>
<td><input type="text" /></td>
</tr>
<tr>
<td><input type="text" id="txt1" /></td>
</tr>
<tr>
<td><input type="text" id="txt2" name="txt2" /></td>
</tr>
<tr>
<td><input type="text" class="c1" /></td>
</tr>
<tr>
<td><input type="text" class="c2" /></td>
</tr>
<tr>
<td><input type="text" id="txt6" /></td>
</tr>
<tr>
<td><span id="sp" style="display:none">隐藏的标签</span></td>
</tr>
<tr>
<td>
<a href="javascript:;">aaa</a>
<a href="https://www.baidu.com" target="_blank">bbb</a>
<a href="https://baike.baidu.com/" target="_blank">ccc</a>
</td>
</tr>
<tr>
<td>
<select id="sel">
<option value="无"></option>
<option value="晴">晴</option>
<option value="阴">阴</option>
<option value="雨">雨</option>
<option value="多云">多云</option>
</select>
</td>
</tr>
<tr>
<td>
<input type="radio" id="yes" />是
<input type="radio" id="no" />否
</td>
</tr>
<tr>
<td>
<input type="checkbox" id="chk1" name="chk" />语文
<input type="checkbox" id="chk2" name="chk" />数学
<input type="checkbox" id="chk3" name="chk" />英语
</td>
</tr>
<tr>
<td>
<input type="button" id="btn1" value="警告消息框" onclick="alert('警告警告')" />
<input type="button" id="btn2" value="确认消息框" onclick="confirm('是否确认')" />
<input type="button" id="btn3" value="提示消息框" onclick="prompt('提示注意')" />
<input type="button" id="btn4" value="显示" onclick="$('#sp').toggle();" />
</td>
</tr>
</table>
</body>
</html>

Python代码:

代码语言:javascript
复制
from selenium import webdriver
from selenium.webdriver.support.select import Select
from selenium.webdriver.common.keys import Keys
import time

browser = webdriver.Chrome() # 创建浏览器对象

browser.get("http://localhost:8001/") # 打开网址
time.sleep(2)

# 定位html元素
txt1 = browser.find_element_by_tag_name('input')
txt1.send_keys('tag_name=input') # 输入文本

txt2 = browser.find_element_by_id('txt1')
txt2.send_keys('id=txt1')

txt3 = browser.find_element_by_name('txt2')
txt3.send_keys('name=txt2')

txt4 = browser.find_element_by_class_name('c1')
txt4.send_keys('class_name=c1')

txt5 = browser.find_element_by_css_selector('.c2')
txt5.send_keys('css=.c2')

txt6 = browser.find_element_by_xpath("//input[@id='txt6']")
txt6.send_keys("xpath=//input[@id='txt6']")

a1 = browser.find_element_by_link_text('bbb')
# a1.click()

txt1.clear() # 清空文本
time.sleep(2)

# 快捷键
txt2.send_keys(Keys.CONTROL, 'a')
time.sleep(1)
txt2.send_keys(Keys.CONTROL, 'c')
time.sleep(1)
txt2.send_keys(Keys.BACKSPACE)
time.sleep(1)
txt2.send_keys(Keys.CONTROL, 'v')
time.sleep(2)

# 定位下拉框
browser.find_element_by_id("sel")\
.find_element_by_xpath("//option[@value='晴']").click()
time.sleep(1)
browser.find_element_by_xpath("//*[@id='sel']/option[3]").click()

# 用Select模块定位
element = browser.find_element_by_id("sel")
Select(element).select_by_index(2) # index 从0开始
time.sleep(1)
Select(element).select_by_value('晴')
time.sleep(1)
Select(element).select_by_visible_text('雨')

# 单选框
element = browser.find_element_by_id('yes')
element.click()
print(element.is_selected())

# 复选框
browser.find_element_by_id('chk1').click()

# 判断元素是否可见
print(browser.find_element_by_id('sp').is_displayed())

# alert弹框
browser.find_element_by_id('btn1').click()
alertElement = browser.switch_to.alert
print(alertElement.text) # 获取对话框文本值
alertElement.accept() # 点击确认按钮

# confirm弹框
browser.find_element_by_id('btn2').click()
confirmElement = browser.switch_to.alert
print(confirmElement.text) # 获取对话框文本值
confirmElement.dismiss() # 点击取消按钮

# 执行JS
js = "$('#sp').toggle();"
browser.execute_script(js)

# 退出
browser.quit()

element.is_displayed()

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-08-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档