selenium元素已显示点击报错ElementNotInteractableException

qq_34040741 2017-09-17 01:27:01
代码如下:
# 此类封装一些常用的浏览器操作
class BasePage(object):
def __init__(self,driver):
self.driver = driver

# 退出浏览器
def quit_browser(self):
self.driver.quit()

# 显式等待_元素可见_XPATH
def wait_explicit_located(self,x_path):
try:
WebDriverWait(self.driver, 5).until(
EC.visibility_of_all_elements_located((By.XPATH, x_path)))
logger.info(u"目标元素已显示 %s" %x_path)
except TimeoutException as e:
logger.error(u"元素%s显示异常 %s" % (x_path,e))
print u'元素显示异常%s' %x_path
self.get_windows_image()

#输入
def type(self,selector,text):
el = self.find_element(selector)
el.clear()
try:
el.send_keys(text)
logger.info("Had type \' %s \' in inputBox" % text)
except NameError as e:
logger.error("Failed to type in input box with %s" % e)
self.get_windows_image()
......
```

```


from ZJCH_selenium.framework.base_page import BasePage

#此类是登录页面的方法
class LoginPage(BasePage):
loginname_box = "xpath=>.//*[@class='login']//*[@class='lg']"
pwd_box = "xpath=>.//*[@class='login']//*[@class='pwd']"
verification_box = "xpath=>.//*[@class='login']//*[@name='yanzheng']"
login_btn = "xpath=>.//*[@class='login']//*[@class='log log1']"
#5位验证码定位
yzm1 = "xpath=>.//*[@class='rt']/span[1]"
yzm2 = "xpath=>.//*[@class='rt']/span[2]"
yzm3 = "xpath=>.//*[@class='rt']/span[3]"
yzm4 = "xpath=>.//*[@class='rt']/span[4]"
yzm5 = "xpath=>.//*[@class='rt']/span[5]"
login_in = "xpath=>.//*[@class='alert_information']/b" #我知道了按钮的定位

def type_loginname(self, text):
self.type(self.loginname_box, text)

def type_pwd(self, text):
self.type(self.pwd_box, text)

def get_yzm(self):
yzm_1 = self.get_text(self.yzm1)
yzm_2 = self.get_text(self.yzm2)
yzm_3 = self.get_text(self.yzm3)
yzm_4 = self.get_text(self.yzm4)
yzm_5 = self.get_text(self.yzm5)
yzm = yzm_1 + yzm_2 + yzm_3 + yzm_4 + yzm_5
return yzm

#输入验证码
def type_verification(self, text):
self.type(self.verification_box, text)

#点击登录按钮
def send_login_btn(self):
self.click(self.login_btn)

#点击我知道了
def send_iknow_btn(self):
self.click(self.login_in)

```

```
import unittest
from ZJCH_selenium.framework.browser_engine import BrowserEngine
from ZJCH_selenium.pageobjects.login_page import LoginPage

#此类是测试登录功能
class test_ZJCH_Login(unittest.TestCase):
def setUp(self):
browse = BrowserEngine(self)
self.driver = browse.open_browser(self)
def tearDown(self):
self.driver.quit()
def test_login(self):
loginpage = LoginPage(self.driver)
loginpage.wait_explicit_located(".//*[@class='login']")
loginpage.type_loginname('admin') #输入用户名
loginpage.type_pwd('123456') #输入密码
yzm = loginpage.get_yzm() #得到验证码
loginpage.type_verification('{}'.format(yzm)) #输入验证码
loginpage.send_login_btn() #点击登录按钮
loginpage.wait_explicit_located(".//*[@class='alert_information']/b")
loginpage.send_iknow_btn() #点击确认登录


** 利用unittest执行测试用例,登录页面可以正常登录,点击我知道了按钮后也正常进入系统首页,从网页上看没有任何异常,但用HTMLTestRunner缺报错,如图**


**我测试过多次,执行到loginpage.wait_explicit_located(".//*[@class='alert_information']/b"),都没有错误,执行loginpage.send_iknow_btn() 就报错(问题是网页操作正常,可以进入系统首页,但为什么生成的测试报告缺有报错),
我试了下把loginpage.send_iknow_btn()去掉,采用
self.driver.find_element_by_xpath(".//*[@class='alert_information']/b").click()
如果采用这句代码就正常运行没有任何报错,这是为什么呢?
[我知道了]这个窗口是在验证了用户登录成功后弹出的一个提示窗口,点击就可以进入系统首页的

另:我已经验证过,loginpage.wait_explicit_located(".//*[@class='alert_information']/b")这句显示等待已经成功的等待了【我知道了】窗口显示才执行的loginpage.send_iknow_btn()
到loginpage.wait_explicit_located(".//*[@class='alert_information']/b")都没有任何问题,元素已显示,点击操作也正常,但是生成到报告里就报错,哪位大神能帮我看看是为什么啊,真的想不通,我的HTMLTestRunner应该不会有问题的,其他测试用例都没什么问题**



然后我试了不采用框架,就没有任何报错,代码如下

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Firefox()
driver.get("http://localhost:8089/chcgypt/login.html")
driver.maximize_window()
WebDriverWait(driver, 5).until(
EC.visibility_of_element_located((By.XPATH, ".//*[@class='login']")))
driver.find_element_by_xpath(".//*[@class='login']//*[@class='lg']").send_keys("admin") #输入用户名
driver.find_element_by_xpath(".//*[@class='login']//*[@class='pwd']").send_keys("123456") #输入密码

#获取验证码并输入
a = driver.find_element_by_xpath(".//*[@class='rt']/span[1]").text
b = driver.find_element_by_xpath(".//*[@class='rt']/span[2]").text
c = driver.find_element_by_xpath(".//*[@class='rt']/span[3]").text
d = driver.find_element_by_xpath(".//*[@class='rt']/span[4]").text
e = driver.find_element_by_xpath(".//*[@class='rt']/span[5]").text
yzm = a+b+c+d+e
driver.find_element_by_xpath(".//*[@class='login']//*[@name='yanzheng']").send_keys(yzm)

#点击登录按钮
driver.find_element_by_xpath(".//*[@class='login']//*[@class='log log1']").click()
WebDriverWait(driver, 5).until(
EC.visibility_of_all_elements_located((By.XPATH, ".//*[@class='alert_information']/b")))
#点击我知道了按钮进入系统
driver.find_element_by_xpath(".//*[@class='alert_information']/b").click()
time.sleep(3)
driver.current_window_handle
#验证是否进入系统首页
WebDriverWait(driver,5).until(EC.presence_of_all_elements_located((By.XPATH,".//*[@class='welcomeToOurWeb']")))
try:
WebDriverWait(driver, 5).until(
EC.visibility_of_all_elements_located((By.XPATH, ".//*[@class='welcomeToOurWeb']")))
flag = True
except TimeoutException:
flag = False
# 这种方式,就没有任何错误
...全文
1476 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧