2 qq 34040741 qq_34040741 于 2017.09.17 13:18 提问

selenium元素已显示点击报错ElementNotInteractableException 2C

代码如下:
# 此类封装一些常用的浏览器操作
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

这种方式,就没有任何错误

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
使用 webdriver报错 ElementNotInteractableException: Message: 的解决办法
睡几秒就好了…
Python使用Selenium测试WebApp在定位元素和使用元素属性报的莫名其妙错误的终极解决方法
1   selenium.common.exceptions.ElementNotVisibleException: Message: Element is not currently visible and so may not be interacted with... 2   selenium.common.exceptions.StaleElementReferenceException
selenium+webdriver错误...exceptions.ElementNotInteractableException: Message: Element is not visible处理
这几天在自学python+selenium自动化测试,遇到一个小问题,折腾了半天,一个偶然的操作竟然解决了。程序报的错误为“selenium.common.exceptions.ElementNotInteractableException: Message: Element is not visible”。     程序如下:#-*-coding:utf-8-*- from selenium
selenium在Firefox浏览器中遇到org.openqa.selenium.ElementNotInteractableException问题解析
背景:在公司网站进行测试时,登陆后有个侧边栏弹出,需要手动关闭,不然 后续会遮挡其他元素。侧边栏类似下面的图片写测试用例代码时,思路就是登陆之后,点击右上角×号进行关闭,代码如下:Thread.sleep(3000); campaignPage.closeManagerBox();具体关闭代码如下 WebElement e = driver.findElement(By.xpath(...
selenium对未在屏幕展示范围内的元素进行操作时,出现元素无法定位的问题解决
由于当前页面内容较多,有横纵向滚动条,操作未在屏幕显示范围内的webelement元素时,提示 no such webelement的错误提示, 解决方法为:模拟手工拖动滚动条到指定元素位置 @FindBy(how = How.ID, id = "Remark") WebElement Remark; ((JavascriptExecutor) driver).executeScript(
selenium IDE ,明明存在元素,却找不到元素 ,报错Element not found
使用 selenium IDE 录制脚本,经常会发生 这样一种错误。 页面上,明明存在这个元素,就是找不到。 其实原理很简单   , 按钮 点击,没有时间延迟,但是页面加载,需要一段时间。 页面元素还没有加载完,却执行了点击事件,就会报错这个。 使用  selenium 的  wati for  就可以解决这个问题。 如果事先知道,这个页面
Selenium webdriver报元素不可点击
初学者 用IDE录制的内容,保存成python脚本,运行各种报错,多数都是找不到元素或者元素不可点击之类的 目前分析有几种原因: 1. 服务器响应慢,元素还没有显示出来 2. 元素不在当前window或frame 对应解决办法: 1. 设置等待,判断元素是否存在 2. 用switch_to.window(windowName) 和 switch_to.frame(frame)
selenium 元素可以定位到,但是无法点击问题
报错: selenium.common.exceptions.WebDriverException: Message: Element is not clickable at point (82, 12). Other element would receive the click: 元素被覆盖,无法点击 描述:页面元素可以定位到,但是无法点击click。
UI TA: selenium webdriver + junit 鼠标悬停,出现另一个元素,点击这个元素的解决方法
历经千辛万苦,终于解决了 UI TA(test automation) 中的这个难题,必须记录一下。 前提是:需要测试的这个页面不是用传统 javascript 写的,而是 google 的 angularjs。开发没用 javascript 脚本去实现一些特效,而是用的 angularjs 自带的一些事件结合 css hover实现的。测试的 UI TA 框架用的是 selenium we
selenium.common.exceptions.ElementNotInteractableException: Message: selenium测试异常解决
#coding=utf-8 from selenium import webdriver import time from selenium.webdriver.common.keys import Keys driver = webdriver.Firefox() driver.get("http://www.baidu.com") #设置窗口尺寸 driver.set_window_si...