自动化-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')]
【自动化-selenium内容扩充】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-8from selenium import webdriver#导入By类from selenium.webdriver.common.by import By#导入显示等待类from selenium.webdriver.support.ui import WebDriverWait

#导入期望场景类from selenium.webdriver.support import expected_conditionsdriver = 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()
自动化-selenium内容扩充
文章图片

释放iframe,重新回到主页面上
driver.switch_to.default_content()
6、selenium中有些组件仍不能满足条件,或者对于某些元素的点击及定位都无法获取,则可以去用使用selenium直接操作JS来封装方法去调用。
driver.execute_script(c)
c里面可以写js的代码

    推荐阅读