selenium中同名的class如何区分

 

 

 

例子是使用了selenium3.7.0 , python 3.6.2  , 火狐57版本css

 

如下是例子的源码:html

<!DOCTYPE html><!-- <html> -->
<!-- <body> -->
    <!-- <div class="back-f5f5ff padding-top-20 padding-bottom-60"> -->
        <!-- <div class="login-right login-style" id="login-container"> -->
            <!-- <p class="font18">登陆输入框</p> -->
            
            <!-- <form id="login-form-confirm"  style="display:none;"> -->
                <!-- <input type="hidden" name="lt" > -->
                <!-- <div class="form-group"> -->
                    <!-- <div class="input-group"> -->
                        <!-- <div class="input-group-addon"><i class="fa fa-user font18 width-20"></i></div> -->
                        <!-- <input type="text" readonly="readonly" autocomplete="off" name="username" id="username" class="form-control input-lg required"  value="" placeholder="请输入您的帐号"> -->
                    <!-- </div> -->
                <!-- </div> -->
                <!-- <div class="form-group"> -->
                    <!-- <div class="input-group"> -->
                        <!-- <div class="input-group-addon"><i class="fa fa-lock font18 width-20"></i></div> -->
                        <!-- <input type="hidden" readonly="readonly" data-security="false" autocomplete="off" name="password" id="password" class="form-control input-lg required" value="" placeholder="请输入登陆密码"> -->
                        <!-- <input type="password" readonly="readonly" data-security="false" autocomplete="off" name="passwordTemp" id="passwordTemp" class="form-control input-lg " value="********"> -->
                    <!-- </div> -->
                <!-- </div> -->
               
            <!-- </form> -->
            
            <!-- <form id="login-form"  > -->
                <!-- <input type="hidden" name="lt" > -->
                <!-- <div class="form-group"> -->
                    <!-- <div class="input-group"> -->
                        <!-- <div class="input-group-addon"><i class="fa fa-user font18 width-20"></i></div> -->
                        <!-- <input type="text" autocomplete="off" name="username" id="username" class="form-control input-lg required" value="" placeholder="请输入您的帐号"> -->
                    <!-- </div> -->
                <!-- </div> -->
                <!-- <div class="form-group"> -->
                    <!-- <div class="input-group"> -->
                        <!-- <div class="input-group-addon"><i class="fa fa-lock font18 width-20"></i></div> -->
                        <!-- <input type="password" autocomplete="off" name="password" data-security="false" id="password" class="form-control input-lg required" value="" placeholder="请输入登陆密码"> -->
                    <!-- </div> -->
                <!-- </div> -->
            <!-- </form> -->
        <!-- </div> -->
    <!-- </div> -->
<!-- </body> -->
<!-- </html> -->

 

当咱们使用browser.find_element_by_css_selector()指令去找到元素体时,并进行输入操做时出现错误并提示说元素不可见python

selenium.common.exceptions.ElementNotInteractableException: Message: Element is not visibleweb

from selenium import  webdriver


class demo:
    def __init__(self):
        import os
        # 实现全局变量的引用
        firefoxBin = os.path.abspath(r"E:\Program Files\Mozilla Firefox\firefox.exe")
        os.environ["webdriver.firefox.bin"] = firefoxBin

        # 代码加载火狐驱动
        firefoxgeckobdriver = os.path.abspath(r"E:\drivers\Drivers\geckodriver64.exe")

        self.browser = webdriver.Firefox(executable_path=firefoxgeckobdriver)
        self.browser.maximize_window()
        self.browser.implicitly_wait(10)

        self.browser.get("file:///C:/Users/70486/Desktop/demo.html")

if __name__ == '__main__':
    case = demo()
    user = case.browser.find_element_by_css_selector('#username')
    print(user)
    user.send_keys('username')

 

通常出现这类缘由的状况有:(我的思路而已)ui

1.元素在from中。须要咱们进入from以后在进行操做spa

2.元素尚未加载出来就进行操做了firefox

3.元素不在当前页面须要上拉或者下拉才能出现日志

发现此次错误并不属于这三类状况。code

后面发现该代码有2对帐号密码的输入框,其中前面那对被隐藏了(style="display:none)。没法从界面上看到,orm

但实际是存在页面的。

遇到不可见的元素时咱们能够经过JavaScript来改变style属性让其显示出来。

若是这么作了页面就出现了两对输入框了,不符合要求。

换了一种寻找的方式来找到下面那对显示的输入框,经过browser.find_elements_by_css_selector()

if __name__ == '__main__':
    case = demo()
    user = case.browser.find_elements_by_css_selector('#username')
    print(len(user))
    for size in user:
        print(size)

 

 打印的日志:

找到了那咱们就经过user[1]来对齐输入。。

user[0]表示第一个,user[1]表示第二个。从0开始计算

if __name__ == '__main__':
    case = demo()
    user = case.browser.find_elements_by_css_selector('#username')
    user[1].send_keys('username')

 

 运行的效果

 

密码输入框也是经过这个思路进行输入的。

 

多实践多操做。

id和class重名的会不少。寻找方式也不少这里只是提供一个思路。

相关文章
相关标签/搜索