xpath使用和等待的方法


## xpath
1、为什么要用它
2、实战当中采取什么样的策略去编写 xpath 表达式
3、xpath 基础语法
- 绝对路径, 相对路径
- 标签
- 属性
- text 文本
- 函数
- 索引
- 元素之间的关系
- 父子
- 祖先和子孙后代
- 同辈
- 轴运算

## 1、为什么要用它
- 没有 id, name 属性
- 通过 class , tagname 找到的不是唯一的
- link text 只能去定位 a


xpath 为什么功能强:
可以组合多个条件,标签名,属性,text, 元素之间的关系

### 绝对路径和相对路径
// 相对路径
/ 绝对路径(不用)


## 相对路径

//*[@id="kw"]
* 是表示任意的标签名称 //input[@id="kw"]

完整xpath的基本语法:
```
//标签名[@属性名="属性值"]
```

xpath 验证:
在源码页面按 ctrl + f 会出现 xpath 输入框
后面能看到你的表达式具体能够得到多少个元素。


## 实战当中采取什么样的策略去编写 xpath 表达式
- 1、通过浏览器的右击,复制xpath 表达式
- 2、第三方工具chropath


## xpath 详细语法
//input[@id="kw"]

文本: //a[text()='抢投标'] ==>
套路 包含某个文本 contains //a[contains(text(), '强投标')]
//a[contains(@id, 'kw')]


属性或text组合 //a[text()='抢投标' and @id="kw" and @name='wd']
xpath 索引是从1开头: (//input[@id and @name])[1]

通过祖先找子孙: //form[@id='form']//input[@name='wd']
通过父亲找儿子: //form[@id='form']/input[@name='wd']

通过儿子找父亲: //sub/..
通过儿子找祖父: //sub/../..


轴运算:
找找哥哥姐姐: //input[@name='wd']/preceding-sibling::span
找找弟弟妹妹: //input[@name='wd']/following-sibling::span
找祖先: //input[@name='wd']/ancestor::span

- 绝对路径, 相对路径
- 标签
- 属性
- text 文本
- 函数
- 索引
- 元素之间的关系
- 父子
- 祖先和子孙后代
- 同辈
- 轴运算


## 总结xpath
1、 浏览器右击复制、chropath 第三方库
2、 检查xpath好的xpath: 层级比较少 1-2
3、 xpath 找到元素验证:ctrl + f
4、 //input[@id='kw'] 基本
5、 //input[@id='kw' and @name='wd'] and
6、 //input[@id='kw' and text()='wd'] text
7、 //input[contains(text(), '')] contains
8、 (//*[contains(text(), '')])[1] 索引
9、 //form//input[] 通过祖先找子孙


## 找元素常见错误
selenium.common.exceptions.NoSuchElementException


## 等待的第一种方法
- 强制等待, time.sleep(3)
- 隐性等待, 智能等待元素被加载, 全局只需要设置一次, 只能等待元素被加载
- 显性等待,非全局
- 真的很麻烦,不容易理解。
- 你可以自己设置某种条件,如果条件满足了,就返回;如果条件不满足,就继续执行
- 等待某个元素可以被点击
- 或者某个元素可见
- 等待某个url=''


隐式等待的写法:


## 显性等待, 页面切换。

## 浏览器操作

相关