selenium工具之获取页面元素的其他信息

已知元素定位、获取元素文本

说明:有时需要获取元素的文本值,做断言比较,则可以使用元素的text属性

from selenium import webdriver
driver
= webdriver.Chrome()
driver.maximize_window()
driver.get(
"https://www.baidu.com")
element
= driver.find_element_by_xpath("//a[@href='http://news.baidu.com']")
text
= element.text
print(text)
driver.quit()
# 打印结果:新闻

已知元素定位、获取元素其他属性

有时元素没有text属性(HTML标签之间的文本值);

而是通过value展示文本值的(通过HTML的value属性名实现文本值);

那么可以获取其它属性方法: get_attribute("属性") ,这里的属性参数可以是 class、name、value等元素包括的任意属性名。

from selenium import webdriver
driver
= webdriver.Chrome()
driver.maximize_window()
driver.get(
"https://www.baidu.com")
element
= driver.find_element_by_id("su")
text
= element.get_attribute("value")
print(text)
driver.quit()
# 打印结果:百度一下

已知元素定位、获取元素标签名

from selenium import webdriver
driver
= webdriver.Chrome()
driver.maximize_window()
driver.get(
"https://www.baidu.com")
element
= driver.find_element_by_id("su")
print(element.tag_name)
driver.quit()
# 打印结果:input

获取浏览器名字

方法:name
 
实例:drvier.name

获取浏览器当前页面title

方法:driver.title

实例:driver.title

获取整个页面元素

print(browser.page_source)

获取当前页面的url

方法:current_url
 
实例:driver.current_url

说明:在python自动化测试中,获取页面地址使用 current_url() 获取当前页面地址;

但在原页面上点击某个按钮打开了一个新页面,如果想要获取新页面的url地址就不能只是使用 current_url() 方法,因为此时该方法获取到的地址还是原页面地址。

例如:

from selenium import webdriver
import time as t

driver=webdriver.Chrome()

driver.maximize_window()

driver.implicitly_wait(30)

driver.get('http:/www.baidu.com')

# 跳转到新页面
driver.find_element_by_link_text('新闻').click()

t.sleep(3)

print('当前浏览地址为:.{0}'.format(driver.current_url))  # 当前浏览器地址为:www.baidu.com

driver.quit()

添加定位页面代码之后再使用 current_url() 获取新页面的地址即可。

from selenium import webdriver
import time as t

driver=webdriver.Chrome()

driver.maximize_window()

driver.implicitly_wait(30)

driver.get('http:/www.baidu.com')

# 跳转到新页面
driver.find_element_by_link_text('新闻').click()

#切换当前页面标签
driver.switch_to.window(driver.window_handles[1])

t.sleep(3)

print('当前浏览地址为:.{0}'.format(driver.current_url)) # 当前浏览器地址为:http://news.baidu.com

driver.quit()

已知元素定位、获取元素坐标位置

driver = webdriver.Firefox()

element = driver.find_element_by_xpath("//someXpath")

location = element.location

print(location)  # {'y': 202, 'x': 165}

已知元素定位、获取元素大小

driver = webdriver.Firefox()

element = driver.find_element_by_xpath("//someXpath")

location = element.location
size = element.size

print(size) # {'width': 77, 'height': 22}

表单的提交

方法:submit
 
解释:查找到表单(form)直接调用submit即可
 
实例:driver.find_element_by_id("form1").submit()

已知元素定位、获取元素CSS的属性值

方法:value_of_css_property(css_name)
 
实例:driver.find_element_by_css_selector("input.btn").value_of_css_property("input.btn")

已知元素定位、获取元素的tagName(元素标签名)

方法:tag_name 
 
实例:driver.find_element_by_id("iptUsername").tag_name

返回值:定位的元素的标签名 如p div标签

删除浏览器所有的cookies

方法:delete_all_cookies()
 
实例:driver.delete_all_cookies()

删除浏览器指定的cookies

方法:delete_cookie(name)
 
实例:deriver.delete_cookie("my_cookie_name")

返回当前会话中的cookies

方法:get_cookies()
 
实例:driver.get_cookies()

根据cookie name 查找映射Value值

方法:driver.get_cookie(cookie_name)
 
实例:driver.get_cookie("NET_SessionId")

关闭当前浏览器页面(浏览器驱动并未杀死)

方法:close()  指当前页面
 
实例:driver.close()

关闭浏览器并且退出驱动程序(杀死浏览器驱动)

方法:quit() 
 
实例:driver.quit()

浏览器回退操作

方法:back()
 
实例:driver.back()

清空输入框操作

方法:clear()
 
实例:实例:driver.find_element_by_id("iptUsername").clear()

浏览器窗口最大化

方法:maximize_window()
 
实例:driver.maximize_window()

浏览器设置窗口大小

browser.set_window_size(300,300)

获取当前浏览器窗口的坐标

方法:get_window_position()
 
实例:driver.get_window_position()

获取当前浏览器窗口的长和宽(获取浏览器窗口大小)

方法:get_window_size()
 
实例:driver.get_window_size()

切换浏览器窗口

# 切换不同的tab页

方法:driver.switch_to.window(window_name)

# 备注:从A页跳转到B页,句柄已经切换过去,但是焦点没有切过去,所以需要switch_to.window,把焦点也切过去,才可以在当前页进行操作。

# 切换是思路,获取所有的句柄,因为返回是一个list,而且要切换的对象都是最后一个,可以使用[-1]直接切过去

# 例如:

driver.switch_to.window(driver.window_handles[-1])

返回最外层表单

方法: driver.switch_to_default_content() # 旧方法

driver.switch_to.default_content() # 新方法

切换至指定frame框架中

方法:driver.switch_to.frame('xxx')

实例:

driver.switch_to.frame(
'frame_name') driver.switch_to.frame(index) driver.switch_to.frame(driver.find_elements_by_tag_name("iframe")[0])

鼠标焦点切换到浏览器中的弹窗

方法:driver.switch_to_alert()

实例:driver.switch_to_alert()

浏览器前进

方法:

driver.forward()

浏览器后退

browser.back()

刷新浏览器页面

方法:driver.refresh() 

浏览器警告框处理

实例1

"""警告框处理"""
# 获取警告框文本信息 AlertText = driver.switch_to.alert.text
print(AlertText)
# 模拟点击确定操作 driver.switch_to.alert.accept()
# 模拟点击取消操作 driver.switch_to.alert.dismiss()

实例2

try:
    tt = browser.switch_to_alert()
    print("打印警告框提示...")
except Exception as e:
    print("faild")
success_text
= tt.text print(success_text) tt.accept()

去除页面元素的只读属性(readonly)

"""去除只读属性"""
#实例12306,日期选择
# 移除readonly属性 js_readonly = 'document.getElementById("train_date").removeAttribute("readonly");'
driver.execute_script(js_readonly) # 清空 开始日期 # driver.find_element_by_id("train_date").clear() # 输入新的日期 # driver.find_element_by_id("train_date").send_keys("2020-05-01")

页面input框利用send_keys上传图片

#F:\dd.jpg 为本地图片路径
driver.find_element_by_id("file_select").send_keys("F:\dd.jpg")

复选框操作

Len()方法可以用来计算元素的个数
click()方法是对某个元素进行勾选;
pop().click(),其实是对某个元素取消勾选
如果只想勾选一组元素中的某一个该如何操作呢? pop()或pop(
-1): 默认获取一组元素中的最后一个。 pop(0): 默认获取一组元素中的第一个。 pop(1): 默认获取一组元素中的第二个。
这样就可以操作这一组元素中的任意一个元素了,只需数一数需操作的元素是这一组中的第几个。

滚动条操作

"""浏览器滚动条并没有提供相应的操作方法。在这种情况下,就可以借助JavaScript来控制浏览器的滚动条。 WebDriver提供了execute_script()方法来执行JavaScript代码。"""
js="window.scrollTo(0,2500);" #0为起始,2500为终点 driver.execute_script(js) js = 'window.scrollTo(0,document.body.scrollHeight)' # 滚动到浏览器底部 driver.execute_script(js) time.sleep(2) js = 'window.scrollTo(0,document.body.scrollTop=0)' # 滚动到浏览器顶部 driver.execute_script(js)

元素聚焦

 """虽然用上面的方法可以解决拖动滚动条的位置问题,但是有时候无法确定我需要操作的元素在什么位置,有可能每次打开的页面不一样,元素所在的位置也不一样,怎么办呢?这个时候我们可以先让页面直接跳到元素出现的位置,然后就可以操作了。同样需要借助JS去实现。"""

target = driver.find_element_by_xxxx()
driver.execute_script("arguments[0].scrollIntoView();", target)

设置网络

print(browser.set_network_conditions(
                offline=False,
                latency=5,  # additional latency (ms)
                download_throughput=500 * 1024,  # maximal throughput
                upload_throughput=500 * 1024)  # maximal throughput)
            )

指定浏览器驱动位置(或者将驱动设置为环境变量)

from selenium import webdriver
browser
= webdriver.Chrome(executable_path="/Users/xinxi/PycharmProjects/selenium_demo/webdriver/chromedriver_mac")
# executable_path来指定chromedirver路径 browser.get('https://www.baidu.com')

保存截图(截取当前浏览器页面页面)

browser.save_screenshot("/Users/xinxi/PycharmProjects/selenium_demo/screen_folder/截图.png")

 图片流截图(截取当前浏览器页面页面)

sc_str = browser.get_screenshot_as_png()
sc_path
= "/Users/xinxi/PycharmProjects/selenium_demo/screen_folder/截图.png" with open(sc_path,"w") as f: f.write(sc_str)

base_64截图(截取当前浏览器页面页面)

sc_str = browser.get_screenshot_as_base64()
html_tmp
= """ <html> <body> <h1>这是一个截图</h1> <img src="data:image/png;base64,{}"/> </body> </html> """.format(sc_str)
html_path
= "/Users/xinxi/PycharmProjects/selenium_demo/screen_folder/截图.html" with open(html_path,"w") as f: f.write(html_tmp)

效果如下:

 

posted @ 2022-04-29 17:36  习久性成  阅读(1096)  评论(0编辑  收藏  举报