DD丢丢 发表于 2017-4-19 13:12:16

python+selenium:识别网页按钮,报错element not visible

各位大神,请问下使用python+selenium:识别网页按钮,报错element not visible该怎么处理呢,能不能改display显示值呢?

lsekfe 发表于 2017-4-19 14:14:55

在selenium +Python 进行web测试时报, 下面的语句报“Element is not visible”,但是通过 xpath checker ,xpath的定位路径是正确的。
driver.find_element_by_xpath("//div[@id='map-setting-install-3']/div/div/label/div/div/label").click()
http://img.blog.csdn.net/20170116151838670?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveXVuZG91amlh/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center


思路: 会不会是没有设置等待的时间,页面还没有来的及显示,在该语句前加上等待3秒

实验: 加了时间等待,没有“Element is not visible”

解决方法:加等待时间就可以了
time.sleep(3)
driver.find_element_by_xpath("//div[@id='map-setting-install-3']/div/div/label/div/div/label").click()

Real_小T 发表于 2017-4-19 14:23:04

你这个按钮与那个display无关,首先确定有没有定位错,如果排除,可尝试添加等待时间或者查看有没有iframe

cq520131517 发表于 2017-4-19 16:16:24

同意二楼的说法,加个时间等待看看再说。你这个页面看起来没有特别之处啊

DD丢丢 发表于 2017-4-19 20:28:57

本帖最后由 DD丢丢 于 2017-4-19 21:16 编辑

哈哈,二楼方法可行,但是还有两个疑问:1.为什么只能用sleep+xpath定位才可以识别呢?使用sleep+class或者使用implicitly_wait+xpath就不能定位呢
2.通过is_displayed()查看登录按钮显示的是false,那为什么不用设置成显示就能直接使用呢
以下为源码,网址是对外公开的公网,方便各位大神帮忙直接查看下:
#coding=utf-8
from selenium import webdriver
from time import sleep
from time import ctime
driver=webdriver.Chrome()
driver.get("https://passport.ds.cn/login.html?returnUrl=http://www.ds.cn/guangzhou")

##方法一:可正常运行
sleep(3)
driver.find_element_by_xpath(".//*[@id='j-generalloginform']/ul/div/input").click()


"""
##方法二:提示element not visible
driver.implicitly_wait(3)
driver.find_element_by_xpath(".//*[@id='j-generalloginform']/ul/div/input").click()

##方法三:提示element not visible
sleep(3)
driver.find_element_by_class_name("btnlogin").click()
"""


DD丢丢 发表于 2017-4-19 21:27:43

lsekfe 发表于 2017-4-19 14:14
在selenium +Python 进行web测试时报, 下面的语句报“Element is not visible”,但是通过 xpath checker...

哈哈,谢谢楼主方法可行,但是还有两个疑问:1.为什么只能用sleep+xpath定位才可以识别呢?使用sleep+class或者使用implicitly_wait+xpath就不能定位呢
2.通过is_displayed()查看登录按钮显示的是false,那为什么不用设置成显示就能直接使用呢
以下为源码,网址是对外公开的公网,方便各位大神帮忙直接查看下:
#coding=utf-8
from selenium import webdriver
from time import sleep
from time import ctime
driver=webdriver.Chrome()
driver.get("https://passport.ds.cn/login.html?returnUrl=http://www.ds.cn/guangzhou")

##方法一:可正常运行
sleep(3)
driver.find_element_by_xpath(".//*[@id='j-generalloginform']/ul/div/input").click()


"""
##方法二:提示element not visible
driver.implicitly_wait(3)
driver.find_element_by_xpath(".//*[@id='j-generalloginform']/ul/div/input").click()

##方法三:提示element not visible
sleep(3)
driver.find_element_by_class_name("btnlogin").click()
"""

Real_小T 发表于 2017-4-20 11:58:30

DD丢丢 发表于 2017-4-19 21:27
哈哈,谢谢楼主方法可行,但是还有两个疑问:1.为什么只能用sleep+xpath定位才可以识别呢?使用sleep+cla ...

第一,可能这里implicitly_wait判断的元素不是决定性的那个,第二,is_displayed并不是你要处理的那个按钮的属性啊
页: [1]
查看完整版本: python+selenium:识别网页按钮,报错element not visible