zoukankan      html  css  js  c++  java
  • Selenium自动化测试-JavaScript定位

    ——————·今天距2020年37·——————

    这是ITester软件测试小栈第83次推文

    做自动化过程中,会发现有的按钮点击不了,或者点击没有反应,也没有报错,或者不能处理滚动条等场景,我们可以通过JavaScript定位来解决这些问题。

    以下总结了5种JavaScript定位的方法,除了id是定位到单个element元素对象,其它的都是elements返回的是list对象。

    1.通过id获取

    document.getElementById(“id”)

    2.通过name获取

    document.getElementsByName(“Name”)

    3.通过标签名选取元素

    document.getElementsByTagName(“tag”)

    4.通过CLASS类选取元素

    document.getElementsByClassName(“class”)

    5.通过CSS选择器选取元素

    document.querySelectorAll(“css selector")

    通过JavaScript获取到元素之后,对元素的属性、内容进行操作。

    • 对属性的操作

    1. 设置属性:对象.setAttribute('属性名', '值');

    2. 获取属性:对象.getAttribute('属性名');

    3. 移除属性:对象.removeAttribute('属性名');

    • 对内容的操作

    1. 设置表单的value属性的值或元素的内容:对象.value="值";

    2. 设置指定元素标签内的文本值: 对象.innerText="值";

    介绍完这些理论后,我们以实际例子来演示,比如现在用JavaScript在百度搜索框输入内容。

    from selenium import webdriver
    driver = webdriver.Chrome()
    driver.get('https://www.baidu.com/')
    # js通过id属性获取对象,然后设置对象的值
    search_js = 'document.getElementById("kw").value="selenium";'
    driver.execute_script(search_js)
    

    接下来,我们看下JavaScript定位可以应用到哪些场景?

    通过JavaScript滑动滚动条

    from selenium import webdriver
    import time
    driver = webdriver.Chrome()
    driver.get('https://www.baidu.com/')
    driver.set_window_size(600,600)
    time.sleep(3)
    # 滚动条滑到底部
    scroll_bottom_js = 'document.documentElement.scrollTop=8888;'
    driver.execute_script(scroll_bottom_js)
    time.sleep(2)
    # 滚动条滑到顶部
    scroll_top_js = 'document.documentElement.scrollTop=0;'
    driver.execute_script(scroll_top_js)
    

    操作日历控件   

    以12306页面,出发日期的日历控件为例。我们先定位到控件,看下源码:

     

                 

    发现出发日期,有个readonly属性,这个时候我们输入不了日期,可以通过两种方法:

     1.去掉readonly属性,然后send_keys输入日期  

    from selenium import webdriver
    import time
    driver = webdriver.Chrome()
    driver.get('https://www.12306.cn/index/')
    # 通过id属性获取元素,然后移除移除元素的readonly属性
    datetime_js = 'document.getElementById("train_date").removeAttribute("readonly");'
    driver.execute_script(datetime_js)
    time.sleep(2)
    driver.find_element_by_css_selector('input#train_date').clear()
    driver.find_element_by_css_selector('input#train_date').send_keys('2019-01-02')
    

     2.直接通过JavaScript输入日期  

    from selenium import webdriver
    import time
    driver = webdriver.Chrome()
    driver.get('https://www.12306.cn/index/')
    time.sleep(2)
    # 通过id属性获取元素信息,然后value改变值
    datetime_js = 'document.getElementById("train_date").value="2020-11-10";'
    driver.execute_script(datetime_js)
    


    操作多窗口

    做自动化过程中,会遇到多开页面的情况,切换多窗口会比较麻烦,这时候我可以用JavaScript来处理。

    我们先看下什么时候会新开页面,以百度页面的新闻链接为例,点击新闻链接会跳转到新开页面。             

    查看前端代码发现,target="_blank",其中_blank表示新开页面,知道了原理,那我们可以利用js去掉_blank这个属性值或者直接删除target属性。

     1.js去掉_blank属性值  

    from selenium import webdriver
    import time
    driver = webdriver.Chrome()
    driver.get('https://www.baidu.com/')
    # js修改target值为空
    news_js = 'document.getElementsByClassName("mnav")[0].target="";'
    driver.execute_script(news_js)
    time.sleep(2)
    driver.find_element_by_link_text("新闻").click()
    

     2.js删除target属性  

    from selenium import webdriver
    driver = webdriver.Chrome()
    driver.get('https://www.baidu.com/')
    # js去掉target属性
    news_js = 'document.getElementsByClassName("mnav")[0].removeAttribute("target");'
    driver.execute_script(news_js)
    driver.find_element_by_link_text("新闻").click()
    

    以上

    That's  all

    ITester软件测试小栈

    往期内容宠幸

    叮—这有一打让你666的测试终极资料包,请查收!

    打开PyCharm永久激活的这两个锦囊,再也不用担心写代码的时候让我付费了!

    Selenium自动化测试-1.selenium介绍及环境安装

    Selenium自动化测试-2.浏览器基本操作

    Selenium自动化测试-3.元素定位(1)

    Selenium自动化测试-3.元素定位(2)

    Selenium自动化测试-3.元素定位(3)

    Selenium自动化测试-4.By定位及如何确定元素唯一

    Selenium自动化测试-5.脚本录制神器Katalon Recorder

    Selenium自动化测试-6.鼠标键盘操作

    Selenium自动化测试-7.获取元素属性信息

    Selenium自动化测试-8.iframe处理

    Selenium自动化测试-9.设置元素等待

    快来星标 置顶 关注

    后台回复资源取干货

    想要获取相关资料软件 ?

    Q群:727998947

  • 相关阅读:
    MySQL "show users"
    MySQL
    A MySQL 'create table' syntax example
    MySQL backup
    MySQL show status
    Tomcat, pathinfo, and servlets
    Servlet forward example
    Servlet redirect example
    Java servlet example
    How to forward from one JSP to another JSP
  • 原文地址:https://www.cnblogs.com/ITester520/p/13203354.html
Copyright © 2011-2022 走看看