Python下Selenium的Xpath定位和模拟鼠标操作

Xpath的一些定位技巧

  • 常用的命令可以参考以下
  • 借助谷歌浏览器的Console进行定位的验证
  • 基本用法
  • 根据元素的属性定位
    • 属性值开头和结尾:starts-with、ends-with
    • 属性值包含:contains
    • 获取节点的属性值
  • 模拟鼠标操作
  • 模拟键盘按键
  • 对浏览器弹出框的针对性操作

常用的命令可以参考以下

https://blog.csdn.net/u013332124/article/details/80621638
https://blog.csdn.net/baidu_32542573/article/details/79675420

借助谷歌浏览器的Console进行定位的验证

验证css,命令: $$(""),双引号内写css表达式。

验证xpath,命令:$x(""),双引号内写xpath表达式。例如
打开http://www.w3school.com.cn/xpath/xpath_axes.asp,检验以下表达式:

$x(’//[@id=“maincontent”]/div[3]/table/tbody/tr[6]/child::td[2]/preceding-sibling::td/parent::/ancestor::table/attribute::class’)

$x(’//[@id=“maincontent”]/div[3]/table/tbody/tr[6]/child::td[2]/preceding-sibling::td/parent::/ancestor::table/ancestor::div[2]’)
序号从1开始!

基本用法

表达式 描述
nodename 选取此节点的所有子节点。
/ 从根节点选取。
// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
. 选取当前节点。
选取当前节点的父节点。
@ 选取属性。

根据元素的属性定位

属性值开头和结尾:starts-with、ends-with

有些元素的ID、class等不固定,但是有些属性的值是有规律的:
例如,某元素的src属性中开头的一部分是不会变的,那么就可以使用starts-with这个xpath定位方法,即,元素以什么开头。那么这个节点的最终定位就类似:
//iframe[starts-with(@src,"/a/b/c/page/userCreate.jsp")]。
与其配套的还有ends-with,也就是以某字符串结尾的元素。

属性值包含:contains

//div[contains(@class,‘Number Skill’)]

**也可以用and or等添加逻辑运算来加强判断条件

获取节点的属性值

xpath无法获取到属性,只能定位到节点。要获取节点的属性需要在元素后使用get_attribute()方法:

urls = browser.find_elements_by_xpath(xpath_urls)
url = urls[0].get_attribute(“placeholder”)

模拟鼠标操作

悬停:ActionChains(webdriver).move_to_element(element).perform()
单击不放:ActionChains(webdriver).click_and_hold(element).perform()
双击:ActionChains(webdriver).double_click(element).perform()
右击:ActionChains(webdriver).context_click(element).perform()
拖放:ActionChains(webdriver).drag_and_drop(source, target).perform()
在源元素上按下鼠标左键,然后移动到目标元素上释放。

模拟键盘按键

from selenium.webdriver.common.keys import Keys #需要导入keys 类包。
send_keys(Keys.BACK_SPACE) 删除键(BackSpace)
send_keys(Keys.SPACE) 空格键(Space)
send_keys(Keys.TAB) 制表键(Tab)
send_keys(Keys.ESCAPE) 回退键(Esc)
send_keys(Keys.ENTER) 回车键(Enter)
send_keys(Keys.CONTROL,‘a’) 全选(Ctrl+A)
send_keys(Keys.CONTROL,‘c’) 复制(Ctrl+C)
send_keys(Keys.CONTROL,‘x’) 剪切(Ctrl+X)
send_keys(Keys.CONTROL,‘v’) 粘贴(Ctrl+V)

对浏览器弹出框的针对性操作

参考:https://blog.csdn.net/kelanmomo/article/details/82886374

browser.switch_to_alert已经在Senlenium3.141版本上取消(可能低版本上还可以用,没试过),取而代之的是支持更多的browser.switch_to.alert
因为还有browser.switch_to.frame等操作,应该是把方法又提升了一级
其他用法有:
element = driver.switch_to.active_element
alert = driver.switch_to.alert
driver.switch_to.default_content()
driver.switch_to.frame(‘frame_name’)
driver.switch_to.frame(1)
driver.switch_to.frame(diver.find_elements_by_tag_name(“iframe”)[0])
driver.switch_to.parent_frame()
driver.switch_to.window(‘main’)

你可能感兴趣的:(UI自动化测试)