selenium常用语法
常用语法
常用的7种方法定位元素:By .name()、By .id()、By.className()、By.linkText()、By.xpath()、By.tagName()、By.cssSelector()
By. name()
当前页面name元素唯一时,可通过 By .name()的方法来定位元素
java用法:driver.findElement(By.name(“checkout_蘑菇”)).click(); // 勾选复选框
python用法:driver.find_element_by_name(“checkout_蘑菇”)click(); #---------勾选复选框
By. id()
当前页面id元素唯一时,可通过 By .id()的方法来定位元素
java用法:driver.findElement(By.id(“dropdown-nav-more”)).click(); // 点击“更多”按钮
python用法:driver.find_element_by_id(“dropdown-nav-more”).click(); #---------点击“更多”按钮
By.className()
class属性值没有空格时,可以选择使用By.className()定位 ;遇到classname有空格的,就换成别的定位元素方法。
java用法:driver.findElement(By.className(“keyword”)).sendKeys(“客户名称”); //输入框输入:客户名称
python用法:driver.find_element_by_class_name(“keyword”).send_keys(“客户名称”); #--------输入框输入:客户名称
By.linkText()
-
模拟点击链接跳转时,可通过获得链接文本全称使用By.linkText()方法 实现跳转
java用法:driver.findElement(By.linkText(“queue_direct4_vip-member_sms_fail_send”)).click(); //点击链接入口queue_direct4_vip-member_sms_fail_send
python用法:driver.find_element_by_link_text(“queue_direct4_vip-member_sms_fail_send”).click(); #------点击链接入口queue_direct4_vip-member_sms_fail_send
-
driver.findElement(By.partialLinkText(“sms_fail_send”)).click(); //部分链接文本名称来实现跳转
By.xpath()
Xpath 即 XML Path Language,通过xml文档中选择节点的语言 ,功能十分强大,一般掌握后可以定位绝大多数元素。
常用语法:
-
根目录定位,用/标识 ,其缺点是通过根目录定位会导致定位值特别长,不便于阅读维护,如果其中一个节点的名称发生变化,就要重新修改脚本。
举个栗子:退出按钮的定位:/html/body[@class=‘rental-default’]/div[@id=‘root’]/div[@class=‘f-full-height’]/div[@id=‘main-view’]/div[@class=‘f-full-height’]/div[@class=‘header’]/div[@class=‘u-pw inner’]/div[@class=‘f-right’]/div[@class=‘m-user-info f-right’]/div[@class=‘f-left logout’]/a
-
相对路径定位,用//标识。相对清晰易读 。 通过上面例子,定位退出按钮的话,可以简写为://div[@class=‘f-left logout’]/a
java用法:driver.findElement(By.xpath("//div[@class=‘f-left logout’]/a")).click(); //点击退出
python用法:driver.find_element_by_xpath("//div[@class=‘f-left logout’]/a").click() #------点击退出
Xpath的常用元素定位方法:
//div/* | xml第一个div下面的所有的元素 |
---|---|
//div[@class=‘f-left logout’]/* | div 的class属性值为:f-left logout 下的所有的元素 ,所有的属性要加@ |
//*[@style] | 查找所有包含style的所有元素 |
//dd[@class='js-menu-item '][1]/a | dd下的第二个的class属性值为:js-menu-item 下的 a标签下的元素定位 ,当元素下存在多个相同class时,可通过数组下标确定位置 |
//a[contains(@href,‘logout’)] | 查询href属性包含有logout的所有a元素 |
//a[starts-with(@href,‘logout’)] | 查询href属性开头为logout的所有a元素 |
//*[text()=‘退出’] | 查询当前页面 纯文字内容为“退出 ” |
//span[text()=‘退出’] | 查询当前页面span标签下 纯文字内容为“退出 ” |
By.tagName()
通过HTML标签名定位元素。就是平时我们按下 F12开发者工具查看网页元素时,发现每行代码前都有< input>、< body>、< div>、< button>等等标签,这些标签就是tagname了。
java用法:driver.findElement(By.xpath("//div[@class=‘apartment-form-content keyword-content’]/div[@class=‘form-group’]")).findElement(By.tagName(“input”)).sendKeys(“张鑫”); // 输入框输入张鑫
python用法: driver.find_element_by_xpath("//div[@class=‘apartment-form-content keyword-content’]/div[@class=‘form-group’]").find_elements_by_tag_name(“input”).send_keys(“张鑫”); #------输入框输入张鑫
By.cssSelector()
By.cssSelector()比 By.xpath()性能更优,查询速度更快,css是配合HTML来工作的,实现的原理是匹配对象的原理;xpath是配合xml工作的,实现的原理是遍历的原理 。 css定位可以分为四类:id、class、其他属性、路径。
cssSelector常用元素定位方法:
- 和tagName的用法一致,用来定位标签,如上图所示的例子,可以改成:
driver.findElement(By.xpath("//div[@class=‘apartment-form-content keyword-content’]/div[@class=‘form-group’]")).findElement(By.cssSelector(“input”)).sendKeys(“张鑫”); // 输入框输入张鑫 - 常用属性元素定位
用法 | 匹配 | 释义 |
---|---|---|
button.btn.btn-default | < button class=“btn btn-default”> | 通过class定位,中间有空格时用 . 表示 |
#kw 或者 div#kw | < div id=“kw”> | 通过ID定位 |
[placeholder=‘请输入密码’] | < input type=“text” value placeholder=“结束日期”> | 通过属性定位,如placeholder属性 |
- 模糊匹配
用法 | 匹配 | 释义 |
---|---|---|
input[name=‘form-content-keyword’] | < input type=“text” name=“form-content-keyword”> | 精准匹配,属性名=属性值 |
input[name^= ‘form-content’ ] | < input type=“text” name=“form-content-keyword”> | ^表示从起始位置开始匹配 |
input[name$=‘content-keyword’] | < input type=“text” name=“form-content-keyword”> | $表示从结尾匹配 |
input[name*=‘content’] | < input type=“text” name=“form-content-keyword”> | *表示从中间开始匹配,包含关系 |
- 层级定位
如下图所示,可通过层级定位获取项目总数
div. AssetMapOverview.assetMap-stats-wraper.f-clear>div.status-item-wrap.f-clear>div.stats-item-msg-wrap>div.stats-item-msg-content f-ellipsis>span
java用法:String project_num = driver.findElement(By.cssSelector(“div. AssetMapOverview.assetMap-stats-wraper.f-clear>div.status-item-wrap.f-clear>div.stats-item-msg-wrap>div.stats-item-msg-content f-ellipsis>span”)).getText(); //获取项目总数
python用法:project_num = driver.find_element_by_css_selector(“div. AssetMapOverview.assetMap-stats-wraper.f-clear>div.status-item-wrap.f-clear>div.stats-item-msg-wrap>div.stats-item-msg-content f-ellipsis>span”).text ; #-----获取项目总数
更多css定位方法参考:https://www.w3.org/TR/selectors-3/