zoukankan      html  css  js  c++  java
  • Selenium里可以自行封装与get_attribute对应的set_attribute方法

    • 我们在做UI自动化测试的过程中,某些情况会遇到,需要操作WebElement属性的情况。

    假设现在我们需要获取一个元素的title属性,我们可以先找到这个元素,然后利用get_attribute方法获取属性的值。
    举个栗子:

    from selenium import webdriver
    driver = webdriver.Chrome()
    driver.get("http://www.baidu.com")
    search_button = driver.find_element_by_id("su")  # 百度搜索按钮
    # 现在我们获取百度一下的值
    value = search_button.get_attribute("value")  # 获取input标签的value,也就是百度一下那4个字
    print(value)   # 打印  百度一下
    
    

    但是现在我们有了新的需求,我们需要改变百度一下这个按钮里边显示的值。

    先说一下原理,原理是利用js的dom(document object model),也就是文档对象模型,获取到input标签, 然后通过js来改变这个input标签的value属性。
    js如下:

    var button = document.getElementById("su");
    button.setAttribute("su", "你猜一下");
    //或者直接给value属性赋值
    document.getElementById("su").value = "你猜一下";
    

    我们在Chrome DevelopmentTools里边可以看到,“百度一下”变成了“你猜一下”~

    image.png

    那么为什么我们不直接用driver.execute_script()这个方法来执行上述js语句呢,但是要知道,因为dom里获取元素的方式有限,并不如selenium那么方便,什么link_text这类的api都是无法使用的。

    昨天偶然发现2个问题,第一是execute_script函数是可以传脚本参数进去的,第二个是selenium抓取到的元素可以作为js的dom元素处理。有了这2点之后呢,就可以干活了!


    现在用WebElement的方法做到同样的事情

    from selenium import webdriver
    driver = webdriver.Chrome()
    driver.get("http://www.baidu.com")
    search_button = driver.find_element_by_id("su")  # 百度搜索按钮
    # arguments[0]对应的是第一个参数,可以理解为python里的%s传参,与之类似
    driver.execute_script("arguments[0].value = '你猜一下';", search_button)
    
    
    

    补充一点, 如果需要获取js语句执行后的返回值,在js语句前加"return" 就行了,例如:

    button_value = driver.execute_script("return arguments[0].value;", search_button)
    
  • 相关阅读:
    浙江理工2015.12校赛-F Landlocked
    浙江理工2015.12校赛-G Jug Hard
    浙江理工2015.12校赛-B 七龙珠
    浙江理工2015.12校赛-A
    Smallest Bounding Rectangle
    Just a Hook(HDU1698 线段树的简单应用)
    覆盖的面积(HDU 1255 线段树)
    Prime Query (ZOJ 3911 线段树)
    JuQueen(线段树 lazy)
    2015弱校联盟(2)
  • 原文地址:https://www.cnblogs.com/we8fans/p/6934592.html
Copyright © 2011-2022 走看看