selenium学习--零碎知识总结
一、定位到元素但是click()无效
一、使用js方法处理
方法一:直接用webdriver的click方法,失效。
browser.find_element_by_xpath("//div[@id='map-distance']/a[4]").click()
text方法检验输出,可以看到确实是定位到了我想要点击的元素的。迷之失效,有人理解原因的话请和我说一下。
注意:此处用xpath定位,先用唯一的id来定位父节点,再定到子节点,子节点从1开始计数,所以是a[4]。
方法二:调用js方法中的setAttribute方法,失效。
js2 = "var q=document.getElementById('map-distance').children[3].setAttribute('class','on')" js3 = "var a=document.getElementById('map-distance').children[0].removeAttribute('class')" browser.execute_script(js2) browser.execute_script(js3)
将元素的class属性设为on,同时删除初始元素的class属性。跑代码的时候已经看到2km被选中了,然而还是失效。。JavaScript我也不太了解,实在不知道为什么。
注意:这里的.chidren返回的是子代的列表,列表是从0开始的,所以取3。
方法三:调用js方法中的click方法,成功!
js2 = "var q=document.getElementById('map-distance').children[3].click()" browser.execute_script(js2)
备注:上面可以作为统一格式来使用,方法:直接右键“Copy JS Path”,然后加上click()就可以了。

二、滚动到制定元素位置
#coding:utf-8 #__author__='wang' #如果要定位的元素在页面的下方不可见的位置,需要对页面的滚动条进行操作,才能正确的 定位该元素 import time from selenium import webdriver driver = webdriver.Firefox() driver.get('https://www.baidu.com') driver.find_element_by_id('kw').send_keys('selenium') driver.find_element_by_id('su').click() time.sleep(2) #方法一: #将滚动条滚动到页面底部 # js = "documentElement.scrollTop=1000"#针对Firefox有效 # # js = "document.body.scrollTop=1000"#针对Chrome有效 # driver.execute_script(js) #将滚动条滚动到页面顶部 # js = "documentElement.scrollTop=0" # driver.execute_script(js) #方法二: #将滚动条滚动到可视范围内,只要能够定位该元素即可 #scrollIntoView(false):参数flase是指元素不会滚动到页面顶部,只要在View页面 显示即可 target = driver.find_element_by_xpath('//div[@id="3"]/h3/a') # arguments[0]:指代的就是target,就是要定位的元素 driver.execute_script("arguments[0].scrollIntoView(false);",target) time.sleep(5) print target target.click()
注意:scrollIntoView(false):参数flase是指元素不会滚动到页面顶部,只要在View页面显示即可
shishi = getEle(driver,20,'//*[@id="lotteryinfo"]/div[2]/div[1]/div/div[2]/div[1]/div[2]/div[2]/div[2]/div/div/span','时时彩进入游戏') driver.execute_script("arguments[0].scrollIntoView(false);", shishi) #拖动到可见的元素去 assert shishi.text == '进入游戏' shishi.click()
三、动态id定位不到
<div class="layui-layer layui-layer-dialog layer-anim" id="layui-layer10" type="dialog" times="10" showtime="0" contype="string" style="z-index: 19891024; width: 360px; top: 1px; left: 314px;"><div class="layui-layer-title" style="">提示信息</div><div id="" class="layui-layer-content layui-layer-padding" style="height: 50px;"><i class="layui-layer-ico layui-layer-ico1"></i>用户名或密码错误</div><span class="layui-layer-setwin"><a class="layui-layer-ico layui-layer-close layui-layer-close1" href="javascript:;"></a></span><div class="layui-layer-btn layui-layer-btn-"><a class="layui-layer-btn0">确定</a></div><span class="layui-layer-resize"></span></div>
1、通过绝对路径定位不到:
err = driver.find_element_by_xpath('//*[@id="layui-layer8"]/div[2]')
2、通过xpath属性定位
err = driver.find_element_by_xpath('//div[@type="dialog"]')

因该元素id是动态的,无法通过id属性进行定位,只好换成xpath.
1.通过绝对路径定位:
By.xpath("/html/body/div[3]/div[2]/div/form/div/div[5]/div/div[3]/div/div[3]/div/div/span/input[9]")----无法定位
2.通过元素索引定位:
By.xpath("//input[9]")---成功定位
顺便补上xpath的另外几种定位方式:
3.使用xpath属性定位
By.xpath("//input[@id='kw1']")
By.xpath("//input[@type='name' and @name='kw1']")
4.使用部分属性值匹配(最强大的方法)
By.xpath("//input[start-with(@id,'file')
By.xpath("//input[ends-with(@id,'_11')
By.xpath("//input[contains(@id,'_')]")
浙公网安备 33010602011771号