乐趣区

关于selenium:自动化selenium内容扩充

1、首先理解 webdriver,selenium 外围玩的就是他;

2、其次晓得根本的元素定位

b.find_element_by_id() 等函数

3、说白了就是要把握元素定位的办法,先手工在浏览器开发者模式下可能失常定位到元素

通过 XPATH:

xpath 中定位元素, 个别倡议相对路径:

// 的模式

* 代表所有

//*[@id=”] 如果两头须要另外一个配合则加一个 and

xpath 也有内置的办法 text()

Xpath 定位元素的几种形式

1)绝对路径定位

a = browser.find_element_by_xpath(‘/html/body/div/div[2]/div/div/div/from/span/input’)
绝对路径定位存在很大的问题就是如果页面元素一扭转元素的 xpath 也会随之扭转,很不稳固,不举荐应用

2)标签 + 属性定位——xpath = “// 标签名[@属性 =’ 属性值 ’]”

例如,百度首页的输入框的 xpath 就能够示意为 //[@id=”kw”],其中 示意所有的标签名

当繁多的属性无奈确定到一个元素时,能够应用组合属性的形式例如,百度首页的输入框能够示意为 //*[@id=”kw” and @name=”wd”]

当然,也能够应用其余的逻辑运算,比方 or、not

3)text()办法定位

百度首页的新闻超链接的 xpath 能够示意为 //*[text()=’ 新闻 ’]

4)contains()办法定位,也叫含糊定位

xpath = “// 标签名[contains(@属性, ‘ 属性值 ’)]” 例如,百度首页的新闻也能够写成 //a[contains(@name,’news’)]

5)starts-with,ends-with 办法定位

starts-with – 匹配以 xx 结尾的属性值;ends-with — 匹配以 xx 结尾的属性值 //*[starts-with(@value,’ 百度一 ’)]能够定位到百度一下按钮;然而 browser.find_element_by_xpath(“//a[ends-with(@name,’_trnews’)]”)定位不到新闻,那是因为 ends-with 是 Xpath2.0 的用法,然而浏览器个别通常只反对 Xpath1.0

6)如果一个元素无奈通过本身的属性定位到,那么能够先定位到他的上一级或者上 N 级,而后再一级一级地找到他

例如,定位到百度首页的输入框,能够示意成 //form[@id=’form’]/span[contains(@class,’s_ipt_wr’)]/input

4、在自动化中的外围就是判断页面的响应,也就是当一个元素或者控件进去后才进行下一步,及这个页面是否因为点击或者其余操作而呈现

WebDriverWait(dr, 10).until(lambda the_driver: the_driver.find_element_by_id(‘dropdown1’).is_displayed())

这个就是期待元素呈现,并判断是否展现;

coding:utf-8

from selenium import webdriver

#导入 By 类

from selenium.webdriver.common.by import By

#导入显示期待类

from selenium.webdriver.support.ui import WebDriverWait
# 导入冀望场景类

from selenium.webdriver.support import expected_conditions

driver = webdriver.Chrome()

alert_is_present():判断页面是否呈现 alert 框

result=WebDriverWait(driver,10).until(expected_conditions.alert_is_present())

print(result.text)

5、selenium 外面的坑,就是浏览器界面的坑,无非就是 iframe 的嵌套中,要来回切换跳转,切换到 iframe 中去搞,之后再切出来

switch_to_frame()

switch_to_window()

开释 iframe,从新回到主页面上

driver.switch_to.default_content()

6、selenium 中有些组件仍不能满足条件,或者对于某些元素的点击及定位都无奈获取,则能够去用应用 selenium 间接操作 JS 来封装办法去调用。

driver.execute_script(c)

c 外面能够写 js 的代码

退出移动版