为什么oppo手机收不到验证码短信验证码

Selenium java中click无效
时间: 11:16:57
&&&& 阅读:114
&&&& 评论:
&&&& 收藏:0
标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&刚接触selenium,拿wordpress发布文章功能练习,输入文章标题、内容后点发布按钮,element.click()无效,能是找到了元素的,从脚本运行的现象看,感觉只是鼠标指针移动到了元素上,并没有执行click操作,相关代码如下:
尝试过的方法有:
查到一篇关于click()和submit()区别的帖子,说click()只能用于submit按钮,而submit()可以用于form中的所有element,包括form本身。于是修改代码为:form &submit,尝试无效
看到别人说过点链接无效,原因是失去焦点,故尝试此种方法,代码如下,结果依然无效
& & & & & & &&
Actions action=new Actions(driver);
action.click(element).perform();
    结果无效
最后,通过click前和click后增加等待时间,问题解决,click后增加等待时间,是留有足够的时间,让 browser 客户端执行 JS 代码,再把请求发到服务端,这个能理解,至于为什么click前再增加等待时间,还是不明白,因为首先是等待了页面加载完成,再说了元素明明是找到了的,不解。
不过如果下次遇到此类问题,从上面几个方面去考虑尝试,也是一个好的经验。标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&原文:/vanya/p/6751925.html
教程昨日排行
&&国之画&&&& &&&&&&
&& &&&&&&&&&&&&&&
鲁ICP备号-4
打开技术之扣,分享程序人生!selenium2.0+python+chrome用click方法无法点击浮动层上按钮的解决方法
尝试利用fixfore浏览器录制后的脚本导出为python语言形式的测试代码,利用chrome浏览器进行测试,无法用click方法点击浮动层上的按钮。
用chrome浏览器测试,发现click方法总是提示按钮无法点击,并且,chrome浏览器对于find_element_by_id()方法也支持的不好,找不到元素。尝试用其他方式进行实现点击功能。
利用find_element_by_xpath方法查找元素,并且利用模拟键盘的形式,可以对按钮进行点击。
driver.find_element_by_xpath("//area[contains(@id,'notice_tip_1')]")
elem.send_keys(Keys.ENTER)
------------------------------------------------签名--------------------------------------------------
&&心简单,世界就简单,幸福才会生长;心自由,生活就自由,到哪都有快乐。&
---------------------------------------------------------------------------------------------------------
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。1、selenium中hidden或者是display = none的元素定位到但是不可以操作怎么办?
@FindBy(id = "bs3Select") public WebElement 状态;查询条件“状态“是多选查询,但是这个元素是隐藏的,即style="display:",可以获取但是点不到没查到好用的方法,最终用的一种笨方法,就是用Java将元素改为可见,操作后还原不可见,关键代码如下:
//将元素改为可见
String js1="document.getElementById(\"bs3Select\").style.display='';";SFSeleniumCommon.执行js(js1);//执行选择操作SFSeleniumCommon.选择下拉列表记录(employeeListPage.状态, 状态);
//将元素改为可见
String js2="document.getElementById(\"bs3Select\").style.display='none';";SeleniumCommon.执行js(js2);//后续的操作employeeListPage.查询按钮.click();
2、cucumber中执行js写登出自动化脚本时遇到一个麻烦问题:鼠标移动到特定元素,就会自动出现下拉菜单,登出按钮在这个下拉菜单里。那么使用任何代码都无法模拟鼠标移动到指定元素,这时候,只能考虑指定元素出现下拉菜单时的格式变化。这时候,通过浏览器页面直接修改这个元素的class,就出现了登出下拉菜单,这时候只要click登出按钮就可以了。另一方面的难点,就是查找这个特定元素时遇到了麻烦,因为没有id,也没有name,所以找不到,只能通过元素标签来一级级找。整个过程花了2个小时,才搞定一行js代码,代码如下:
String logoutJs="var allPageTags=document.getElementsByTagName('li');for (i=0; i&allPageTags. i++)if (allPageTags[i].className=='dropdown dropdown-user') {allPageTags[i].setAttribute('class','dropdown dropdown-user open');}";SeleniumCommon.执行js(logoutJs);登出按钮.click();
阅读(...) 评论()解决Selenium弹出新页面无法定位元素问题(Unable to locate element) - 简书
解决Selenium弹出新页面无法定位元素问题(Unable to locate element)
首先,简书账号和CSDN账号都是我的,所以我依然是原创作者,因为喜欢简书比较单纯简洁的格式,所以我重心慢慢移向简书。两个依然会保持更新,毕竟大家都是MarkDown编辑啊,复制粘贴不要太快,当然,以后文章,简书首发。
Python 2.7IDE Pycharm 5.0.3
环境细节详见
对于同一页面无法定位元素问题请见姊妹篇
只解决一个问题--NoSuchElementException: Message: Unable to locate element
在上一篇博客中,我进行了自动化登录,之后我想直接进行对图书的续约操作,但是利用元素定位的方法,怎么都找不到元素,我一直以为是我的规则用的不对,导致元素找不到,其实,只是窗口句柄还停留在上一个页面而已!对于新弹出的页面还没有定位!!!那怎么可能找得到在新页面的元素呢!!这是新手(我)犯下最大的错误,只顾于对元素方法的定位,却没有意识到页面发生跳转后的handles的变化。
窗口重定位,感谢让我找到解决方案,最终得以实现句柄的重定位!
(这段可跳过,因为百度太不稳定了,测试结果有差别)
但话说到这的时候,我很疑惑一篇文章,他的方法我进行测试时不可行的,请看测试;
他的代码:我一行没动进行测试
#coding=utf-8
from selenium import webdriver
import time
browser=webdriver.Firefox()
browser.get("")
browser.find_element_by_id("kw").send_keys("selenium")
browser.find_element_by_id("su").click()
time.sleep(3)
sreach_window=browser.current_window_handle
//此行代码用来定位当前页面
browser.find_element_by_xpath("/html/body/div[3]/div[4]/div/div[3]/div[4]/h3/a").click()
time.sleep(5)
当然如果我一点都不改,也是进行不了测试的,这位大哥把注释符号写错了,不是//,而是#啊大哥ok,然后运行下:出错了
这里写图片描述
所以我感到好奇的是,这位大哥到底有没有跑过这段代码,看着原创的样子应该没有抄袭才对啊,那应该是测试过代码才对,但是可重复性在哪?最后发现需要修改http成这样才能访问(大哥少加个/):browser.get("/")修改后代码如下:
#coding=utf-8
from selenium import webdriver
import time
browser=webdriver.Firefox()
browser.get("/")
browser.find_element_by_id("kw").send_keys("selenium")
browser.find_element_by_id("su").click()
time.sleep(1)
sreach_window=browser.current_window_handle #此行代码用来定位当前页面
time.sleep(2)
browser.find_element_by_xpath("/html/body/div[3]/div[3]/div/div[3]/div[4]/h3/a").click()#我这里修改了一下div[4],大哥的索引直接到有道翻译了,不利于下一步测试
time.sleep(1)
ok,这次能正常索引到值,但是!!!我要说的是但是!!!这根本没有跳转页面!还是在同一个页面进行操作的!如果我把大哥的代码改成:在我测试的时候,发生了奇怪的事情,同样的代码,有时候能跑有时候抛出错误,我已设定休眠时间,难道是我频繁访问导致百度封我?刚才上述的代码我都实际测试过的,但是现在又不能用了--wtf--,所以。我换了稳定的引擎,我采用bing搜索来试试,上面的全部作废,如果有人知道问题出在哪,请留言
应该是搜索引擎热点的问题,每次键入相同的值可能搜索结果首项会不一致的,百度可能更新热点比较快把,所以出现了我所谓不稳定的情况
这里写图片描述
我和上述那位大哥不同的观点在于,他用的
sreach_window=browser.current_window_handle
方法并不能实现对新窗口句柄的捕捉,我以bing主页为测试页,重新构造了一下,
#coding=utf-8
from selenium import webdriver
import time
browser=webdriver.Firefox()
browser.get("/")
keywords = 'MrLevo520 CSDN'
send_keywords=keywords.decode('utf-8')#中英混输入可防止乱码
browser.find_element_by_id("sb_form_q").send_keys(send_keywords)
time.sleep(1)
#----------操作一:进行对关键字MrLevo520 CSDN搜索----------------
browser.find_element_by_id("sb_form_go").click()#执行此操作会进行搜索,但是没有弹出新窗口,所以句柄不用重定位
time.sleep(3)
#----------操作二:对搜索页面"我的CSDN"进行点击操作--------------
browser.find_element_by_xpath("/html/body/div/ol/li/h2/a").click()#进行当前页面点击第一项
#--------操作三:对新弹出的页面再点击"贡献的资源"选项-----
sreach_window=browser.current_window_handle
browser.find_element_by_xpath("/html/body/div[3]/div[2]/div[2]/div/a[3]").click()
time.sleep(5)
浏览器运行结果只到如图:
并没有我期待的点击’贡献的资源‘
而且抛出错误:
<mon.exceptions.NoSuchElementException: Message: Unable to locate element: {"method":"xpath","selector":"/html/body/div[3]/div[2]/div[2]/div/a[3]"}
可见,此语句并没有实现句柄重定位的功能,然后我再试试下面的方法,所有语句不变,只改变获取当前句柄的语句,改成
browser.switch_to_window(browser.window_handles[1])
最后程序应该是这样:
#coding=utf-8
from selenium import webdriver
import time
browser=webdriver.Firefox()
browser.get("/")
keywords = 'MrLevo520 CSDN'
send_keywords=keywords.decode('utf-8')#中英混输入可防止乱码
browser.find_element_by_id("sb_form_q").send_keys(send_keywords)
time.sleep(1)
#----------操作一:进行对关键字MrLevo520 CSDN搜索----------------
browser.find_element_by_id("sb_form_go").click()#执行此操作会进行搜索,但是没有弹出新窗口,所以句柄不用重定位
time.sleep(3)
#----------操作二:对搜索页面"我的CSDN"进行点击操作--------------
browser.find_element_by_xpath("/html/body/div/ol/li/h2/a").click()#进行当前页面点击第一项
#--------操作三:对新弹出的页面再点击"贡献的资源"选项-----
browser.switch_to_window(browser.window_handles[1])
browser.find_element_by_xpath("/html/body/div[3]/div[2]/div[2]/div/a[3]").click()
time.sleep(5)
最后结果,按照我的思路,进行了相应的点击,最后如图
所以从上述的例子上来说,语句sreach_window=browser.current_window_handle并没有实现重定位,可能我才疏学浅,但至少,在上述的那位大哥的博客中,写的是错误的,运行失败,我对的所有数据负责,实际测试失败。
7.17-补充:另一种获取句柄方法
还有另一种方法,就是直接定位当前最新弹出的窗口。代码是这样的
for handle in browser.window_handles:#方法二,始终获得当前最后的窗口,所以多要多次使用
browser.switch_to_window(handle)
那么结合到我的代码中那就是这样的:
#Author:哈士奇说喵
#因为搜索引擎检索项根据热度来排名,所以我只能对7.17的数据进行测试和负责,大家测试时候注意元素变化
#coding=utf-8
from selenium import webdriver
import time
browser=webdriver.Firefox()
browser.get("/")
keywords = 'MrLevo520 CSDN'
send_keywords=keywords.decode('utf-8')#中英混输入可防止乱码
browser.find_element_by_id("sb_form_q").send_keys(send_keywords)
time.sleep(1)
#----------操作一:进行对关键字MrLevo520 CSDN搜索----------------
browser.find_element_by_id("sb_form_go").click()#执行此操作会进行搜索,但是没有弹出新窗口,所以句柄不用重定位
time.sleep(3)
#----------操作二:对搜索页面第一项进行点击操作--------------
browser.find_element_by_xpath("/html/body/div/ol/li/h2/a").click()#进行当前页面点击第一项
#--------操作三:对新弹出的页面再点击"我的头像"选项-----
#注意此时已经是弹出的第一个窗口了,需要重新定位句柄
'''browser.switch_to_window(browser.window_handles[1])#方法一'''
for handle in browser.window_handles:#方法二,始终获得当前最后的窗口
browser.switch_to_window(handle)
browser.find_element_by_xpath("//div[@id='body']/div[2]/div/div/ul[2]/div/a").click()
#------------------操作四:点击"贡献的资源"-------------------
#注意此时已经是新弹出的第二个窗口了,需要重新定位句柄
browser.switch_to_window(browser.window_handles[2])#方法一,注意window_handles[2]变成了2
'''for handle in browser.window_handles:#方法二,始终获得当前最后的窗口
browser.switch_to_window(handle)'''
browser.find_element_by_xpath("/html/body/div[3]/div[2]/div[2]/div/a[3]").click()
time.sleep(5)
上面的代码,我要说几点,总共实现完成会存在三个浏览器窗口,也就是相当于实现了两次句柄重定位功能,也就是下面的图片,对bing搜索“MrLevo520 CSDN”跳出的最热项,也就是这一篇(感谢大家厚爱),但是昨天最热弹出来的是直接是我的主页,大家从上面的动图应该也可以看出来,所以等你测试这段代码的时候,可能最热项目又变化了,道理大家懂就ok,不影响重抓句柄代码。
代码实现了从1,到2,点击头像后,再跳转到3主页,之后再点击"贡献资源",实现的动图如下:
Pay Attention
1.搜索引擎根据热度来排名,也就是代码具有"不稳定性",应该根据自己实际情况,定位不同元素,我只对当前编辑时间的数据负责
2.在实际操作过程中,会产生第一个页面还没等第二个页面缓冲完,直接又"占领"主视觉的问题,别担心,句柄还是在传递的,程序一直在跑,而且没有出错,过一会时间就会更新加载页面的,如果想要关闭无关页面,请看这篇博客
3.可能我的代码第一次获取句柄和第二次获取句柄不一样的方法,这是为了展示,你可以两次句柄获取都用方法二,也可以都是用方法一,但是方法一注意修改标号。
方法一 VS 方法二
相比较于方法二,方法一的优点在于后续操作,比如关闭第几个窗口,句柄传递是按照顺序来的。缺点在于对于较多新页面,有时候弹出窗口太多会变得难以计算。
而方法二,一直在获取最后的窗口,如果你只是对最后的窗口进行操作,也就是(自己定义的)”前向“操作时,不计后果,可以直接拿来用,而且代码不变。缺点在于,如果要返回到某个窗口句柄,那就显得没有方法一来的好,至少我现在是这么认为的,可能以后我会回来修改。
我姑且认为这句语句,单独作用于上述博客中是不可行的。所以我在后续的博客中对窗口重定向语句改成了browser.switch_to_window(browser.window_handles[1]),至少在我的实验中,这句语句实现了我需要的操作。最后上张动图表示流程:
将待解决实际问题解决,方法总是好多种,就看自己想不想解决。
so ,see you guys,have a good night!
一只研究汪}

我要回帖

更多关于 oppo手机收不到验证码 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信