第一个自动化测试脚本
from selenium import webdriver
from selenium.webdriver.chrome.service import Service# 创建 WebDriver 对象,指明使用chrome浏览器驱动
wd = webdriver.Chrome(service=Service(r'D:\eg浏览器下载文件\chromedriver-win64\chromedriver.exe'))# 调用WebDriver 对象的get方法 可以让浏览器打开指定网址
wd.get('https://www.baidu.com')# 程序运行完会自动关闭浏览器,就是很多人说的闪退
# 这里加入等待用户输入,防止闪退
input('等待回车键结束程序')
这样写会有问题,就是每一次都要制定路径,所以我们将路径添加到path里面。写代码时,就可以无需指定浏览器驱动路径了,像下面这样
wd = webdriver.Chrome()
一定要注意的是, 加入环境变量 Path 的,不是浏览器驱动全路径,比如
d:\tools\chromedriver.exe
而是
d:\tools
选择元素方法
通过id选择元素:
# 根据id选择元素,返回的就是该元素对应的WebElement对象
element = wd.find_element(By.ID, 'kw')
通过class名选择元素:
wd.find_elements(By.CLASS_NAME, 'animal')
注意element后面多了个s,如果不加s,那么久只会返回第一个元素
一个标签有多个class属性呢??
例子:
<span class="chinese student">张三</span>
element = wd.find_elements(By.CLASS_NAME,'chinese')element = wd.find_elements(By.CLASS_NAME,'student')
上面两种都能选择,但是不能写成:
element = wd.find_elements(By.CLASS_NAME,'chinese student')
输入元素:
element.send_keys('通讯\n')
循环元素
for element in elements:print(element.text)
输出元素
print(element.text)
根据tag
我们可以通过指定 参数为 By.TAG_NAME ,选择所有的tag名为 div的元素,如下所示
elements = wd.find_elements(By.TAG_NAME, 'div')
不仅 WebDriver对象有 选择元素 的方法, WebElement对象 也有选择元素的方法。
WebElement对象 也可以调用 find_elements, find_element 之类的方法
WebDriver 对象 选择元素的范围是 整个 web页面, 而
WebElement 对象 选择元素的范围是 该元素的内部。
sleep
# 等待 1 秒
from time import sleep
sleep(1)
因为我们的代码执行的速度比 网站响应的速度 快。
但是这样的方法 有个很大的问题,就是:设置等待多长时间合适呢?
Selenium 的 Webdriver 对象 有个方法叫 implicitly_wait ,可以称之为 隐式等待 ,或者 全局等待 。
wd.implicitly_wait(10)
如果找不到元素, 每隔 半秒钟 再去界面上查看一次, 直到找到该元素, 或者 过了10秒 最大时长。
清除元素和输入元素
element = wd.find_element(By.ID, "input1")element.clear() # 清除输入框已有的字符串
element.send_keys('白月黑羽') # 输入新字符串
获取元素的属性值
element = wd.find_element(By.ID, 'input_name')
print(element.get_attribute('class'))
常用:
1.获取classprint(element.get_attribute('class'))
2.获取html中的文本内容element.get_attribute('innerHTML')
3.获取输入框文字print(element.get_attribute('value'))
4.获取text属性(可以获取元素 展示在界面上的 文本内容。)print(element.get_attribute('text'))
注意:有时候,元素的文本内容没有展示在界面上,或者没有完全完全展示在界面上。 这时,用WebElement对象的text属性,获取文本内容,就会有问题。出现这种情况,可以尝试使用color=red>element.get_attribute('innerText')
,或者 element.get_attribute('textContent')
使用 innerText 和 textContent 的区别是,前者只显示元素可见文本内容,后者显示所有内容(包括display属性为none的部分)
get_attribute 调用本质上就是调用 HTMLElement 对像的属性!!!