精华内容
下载资源
问答
  • Selenium定位iframe动态ID

    千次阅读 2019-01-28 11:31:00
    Selenium定位iframe动态ID。 126邮箱实例 买了本虫师的书来学习selenium2自动化测试,然后写第一个实例就遇到了一些坑,好在有热心的网友提供了帮助,解决了问题 要学习selenium总...
    Selenium定位iframe动态ID。

                                      126邮箱实例

    买了本虫师的书来学习selenium2自动化测试,然后写第一个实例就遇到了一些坑,好在有热心的网友提供了帮助,解决了问题

    要学习selenium总要先搭建好python环境,这个就不说了 ,网上一搜一大把,也要装好selenium包,毕竟要用到里面的webdriver,它支持firefox,IE,Opera,和Chrome,

    so我就装了火狐和谷歌的驱动,把驱动放在python文件夹里面就行了

     

    之后按照上面的例子写了一个脚本

    坑的是,我定位不到元素

    因为id是动态获取的,并且镶嵌在iframe表单中,好了,只能去定位iframe表单了,

    iframe表单也是动态获取的。。然后在测试的朋友发了我一个链接,嗯 找到解决办法了

    然后完美解决了,一下是方法:

     

    非动态的iframe可以通过以下方式定位

    有id,并且唯一,直接写id

    driver.switch_to_frame("x-URS-iframe")

    driver.switch_to.frame("x-URS-iframe")(较新版本推荐使用方法)

    有name,并且唯一,直接写name

    driver.switch_to_frame("xxxx")

    driver.switch_to.frame("xxxx") (较新版本推荐使用方法)

    无id,无name,先定位iframe元素

    iframe = driver.find_elements_by_tag_name("iframe")[0]

    driver.switch_to_frame(iframe)

    driver.switch_to.frame(iframe) (较新版本推荐使用方法)

     

     

    如果是动态Id需要借助xpath部分元素属性定位,xpath中提供了三个非常好的方法来为我们定位部分属性值:

    driver.find_element_by_xpath

    ("//div[contains(@id, 'btn-attention')]")

    driver.find_element_by_xpath

    ("//div[starts-with(@id, 'btn-attention')]")

    driver.find_element_by_xpath

    ("//div[ends-with(@id, 'btn-attention')]") 

    # 这个需要结尾是‘btn-attention’

    contains(a, b) 如果a中含有字符串b,则返回true,否则返回false

    starts-with(a, b) 如果a是以字符串b开头,返回true,否则返回false

    ends-with(a, b) 如果a是以字符串b结尾,返回true,否则返回false

     

    代码如下:

    #引入模块

    from selenium import webdriver

    #引入时间模块

    import time

    #实例化驱动对象

    driver = webdriver.Firefox()(把驱动放到python的script可以正常调用使用这种写法)

    driver = webdriver.Firefox(executable_path=r'F:\Python\Scripts\geckodriver.exe')(找不到驱动可以通过写路径的方式来调用)

    #打开126邮箱

    driver.get("https://mail.126.com/") 

    #浏览器最大化

    driver.maximize_window()

    #休眠3秒,方式刷新不出来。

    time.sleep(3)

    #根据xpath定位ifram表单

    driver.switch_to.frame(driver.find_element_by_xpath("//iframe[starts-with(@id, 'x-URS-iframe')]"))

    #定位输入账号

    driver.find_element_by_name("email").send_keys("xxxxxxxx")

    #定位输入密码

    driver.find_element_by_name("password").send_keys("xxxxxxxx")

     
     

     
     

    转载于:https://www.cnblogs.com/yronl/p/10329509.html

    展开全文
  • Java-Selenium定位动态id

    千次阅读 2017-12-26 10:13:47
    注意参考博客最下的获取动态id规律
    展开全文
  • 今天再给大家分享一个定位不到元素的原因——动态id。没有打开新页面、没有alert、没有frame、加了等待时间,但是还是定位不到元素?很有可能是你要定位的元素的属性是动态的,即每次打开页面,这个元素的id或者...

    今天再给大家分享一个定位不到元素的原因——动态id。

    没有打开新页面、没有alert、没有frame、加了等待时间,但是还是定位不到元素?很有可能是你要定位的元素的属性是动态的,即每次打开页面,这个元素的id或者class等元素属性是动态生成的。代码执行时,元素的属性已经与之前不同,用之前的属性值去定位自然是定位不到的,会抛出NoSuchElementException。

    那么,怎么判断元素属性是否是动态?很简单,一般看到元素属性里有拼接一串数字的,就很有可能是动态的。想要分辨,刷新一下浏览器再看该元素,属性值中的数字串改变了,即是动态属性了。

    如下:

    <div id="btn-attention_2030295">...</div>

    怎么定位这类型的元素呢?

    1. 根据其他属性定位

    如果有其他固定属性,最先考虑的当然是根据元素的其他属性来定位,定位方式那么多,何必在这一棵树上吊死。。

    2. 根据相对关系定位

    根据其附近的父节点、子节点、兄弟节点定位,关于这方面,博主之前的一篇文章可作为参考:Python selenium —— 父子、兄弟、相邻节点定位方式详解

    3. 根据DOM顺序index定位

    这个很简单,找到该元素在主文档或某级父节点中的index,然后根据index可轻松定位,不过这种方式可能不够稳定,如果可以,还是用其他的方法定位更加合适。

    4. 根据部分元素属性定位

    xpath中提供了三个非常好的方法来为我们定位部分属性值:

    driver.find_element_by_xpath("//div[contains(@id, 'btn-attention')]")
    driver.find_element_by_xpath("//div[starts-with(@id, 'btn-attention')]")
    driver.find_element_by_xpath("//div[ends-with(@id, 'btn-attention')]")  # 这个需要结尾是‘btn-attention’

    contains(a, b) 如果a中含有字符串b,则返回true,否则返回false

    starts-with(a, b) 如果a是以字符串b开头,返回true,否则返回false

    ends-with(a, b) 如果a是以字符串b结尾,返回true,否则返回false

    这里要多嘴一句,各种浏览器对xpath的支持情况不一样,像IE就差点,所以有时候会出现xpath在一个浏览器能定位到但在另一个浏览器定位不到的问题,不要惊讶。。

    附上一个此类型问题:

    Xpath “ends-with” does not work


    更多关于python selenium的文章,请关注我的CSDN专栏:Python Selenium自动化测试详解

    展开全文
  • vue绑定动态id

    万次阅读 2018-11-20 10:51:13
    场景:使用vue中的v-for循环动态的添加input,在编辑的时候需要获取input的id进而获取编辑值传入后台。由于通过:id传入的id有可能空值,因此我采用了拼接的方式将属性值和下标index拼接在一起做为id,成功解决空值...

    场景:使用vue中的v-for循环动态的添加input,在编辑的时候需要获取input的id进而获取编辑值传入后台。由于通过:id传入的id有可能空值,因此我采用了拼接的方式将属性值和下标index拼接在一起做为id,成功解决空值问题。

    html代码:

    <el-form-item label="姓名:">
    	<div>
    		<el-input v-model="dialogTable.name" placeholder="姓名" style="width:200px;"></el-input>
    		<el-button @click="add">新增</el-button>
    	</div>
    	<div v-model="this.dialogTable.lists">
    		<div v-for="(item, index) in this.dialogTable.lists" :key="index" >
    			<el-input :id="nameId(item,index)" :value="item.name" style="width:200px;" @change="editNmae(item,index)"></el-input>
    			<el-button @click="delete(index)">删除</el-button>
    		</div>
    	</div>
    </el-form-item>

     js代码:

    var editName = function(item,index) {
    	/*var name = $('#'+item.name).val();*///此处不用这种方式获取id值,是因为id可能为特殊字符,比如逗号分号
    	var id = nameId(item,index);
    	var name = document.getElementById(id).value;
    	this.dialogTable.lists[index].name = name;
    }
    
    var nameId = function(item,index) {
    	if(item.name == null){
    		return index+"name";
    	}else{
    		return item.name+index;
    	}
    }
    var add = function() {	
    		this.dialogTable.lists.push(
    				{name:this.dialogTable.name});}
    	this.dialogTable.name = undefined;
    }
    

    回头看的时候恍然大悟,大费周折实现的效果,使用vue的v-model绑定便可以实现

    <el-form-item label="姓名:">
    	<div>
    		<el-input v-model="dialogTable.name" placeholder="姓名" style="width:200px;"></el-input>
    		<el-button @click="add">新增</el-button>
    	</div>
    	<div v-model="this.dialogTable.lists">
    		<div v-for="(item, index) in this.dialogTable.lists" :key="index" >
    			<el-input v-model="item.name" style="width:200px;"></el-input>
    			<el-button @click="delete(index)">删除</el-button>
    		</div>
    	</div>
    </el-form-item>

     

    展开全文
  • 动态id以及js获取动态id

    千次阅读 2014-08-25 18:11:21
    ">id</span>=";">startTM_(255, 153, 102);">${res.resumeId}</span>"</span> ;">value</span>="${res.startTM?default("")}" onFocus="WdatePicker()"/> 这里就是对id的拼接 function update_Resume(id){ ...
  • selenium —— 动态id、class怎么定位

    千次阅读 2016-12-20 17:38:58
    今天再给大家分享一个定位不到元素的原因——动态id。 没有打开新页面、没有alert、没有frame、加了等待时间,但是还是定位不到元素?很有可能是你要定位的元素的属性是动态的,即每次打开页面,这个元素的id或者...
  • 是否还记得 mail.163.com 这个网址的 ...今天了解一下如何定位动态id。 1、什么是动态id? 你应该会问我这个问题?变化的id,没错。但是我们总不能定位元素的时候,每次都要刷新下页面,看看id是否变化吧?
  • selenium定位动态id元素

    万次阅读 多人点赞 2017-01-16 16:40:24
    做web自动化时,常常会碰到需要定位的元素id不是固定的...因该元素id动态的,无法通过id属性进行定位,只好换成xpath. 1.通过绝对路径定位: By.xpath("/html/body/div[3]/div[2]/div/form/div/div[5]/div/div[3...
  • vue 带下标循环、点击事件动态id赋值和事件传参 Vue 使用的 CDN,可以直接复制,预览测试 v-for 和 click 事件传参效果。 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> &...
  • 使用JQ获取表格中的动态id数据

    千次阅读 2018-11-22 09:47:08
    最近有一个从表格中获取动态id的一个需求,虽然以前做过,但是因为之前也没有怎么记录下来,所以忘记了。查了一些资源,现在知道怎么实现了。然后记录下来,下次再用到了,就可以回来查了。 二,解决方案 2.1 ...
  • 例如,通过添加按钮来动态添加文本框,并且可以使文本框id自增的方法
  • 今天再给大家分享一个定位不到元素的原因——动态id。 没有打开新页面、没有alert、没有frame、加了等待时间,但是还是定位不到元素?很有可能是你要定位的元素的属性是动态的,即每次打开页面,这个元素的id或者...
  • 动态Id和静态Id

    千次阅读 2012-09-20 21:18:04
    这个事情真的是很不注意就产生的 , 在我自己电脑上可以在别人电脑上不可以,原因很简单;...我有两个Id一个是表格自动生成的name+Id 另一个是查看的时候文本框的I为name1 这样就存在想同的id就会出错
  • jQuery 如何通过 ID 选择器 获取动态ID

    千次阅读 2019-04-05 10:55:20
    step是常量 i是变量 注意"#"+id+"" 末尾还有一个"" var id= 'step' + i; $("#" + id+ "").show(); $("#" + id+ "").hide();
  • Jquery取得动态id中的值

    千次阅读 2019-07-31 17:34:55
    项目开发中需要给表格中每一行加上一个下拉列表,在操作时取得该下拉列表中的值,由于下拉列表的id是在字符串的基础上加上索引号生成的,这时需要动态得到id,再取得该id的值。代码如下: var va=$("#" + select...
  • IDE Pycharm 5.0.3原因不止一个小伙伴告诉我,想模仿我的一键CSDN写博客想模拟登录qq或者网易邮箱,但是貌似用xpath和css都不行了,我尝试了一下,原来他们采用动态id了。所以直接定位id已经不能用了,但是xpath找来...
  • jquery遍历动态id

    千次阅读 2017-03-29 13:47:11
    <td><input type="checkbox" id="back<s:property value='#statu.index' />" value="<s:property value='#statu.index' />"> <td><%-- 航段<s:property value='#statu.count' />: --%> ...
  • jQuery获取动态id的办法

    千次阅读 2017-06-08 14:33:36
    在开发中有时候会需要使用jQuery获取动态id,下面是代码: id="{{hospital.id + 'hospital'}}" class="z_tl z_t2 clearfix z_poaR" ng-click="openDoctorList(hospital.id,hospital.name)">  $scope....
  • 如此i是动态的,id动态拼接的  var q = $("#nodeOrderList_" + i +"").val(); js: /*验证 preplay 页面表单*/ $().ready( function() { $("#listTable").find("tr").hover(function() { $("#...
  • 动态input text 取值(动态id

    千次阅读 2014-09-02 15:30:50
    我想大概是因为id 相同的原因,若id 改为动态<input type="text" size="5" id="${userLesson.id}"/> 估计能够解决此问题 但是我这个id 还不能传到js中, 所以此方法行不通, 后来找到此解决方法 ...
  • ="id" value ="urlContent ${ index } " /> < tr > < td > < a href= "javascript:void(0)" id= " ${ id } " value= " ${ a.name } " onclick= ' findContent ( this . id ) ' > ${ a.title } a...
  • JS获取A元素动态ID

    千次阅读 2019-04-30 14:04:38
    a href="java:void(0)" onclick="GetID(this)" class="CSS" id="变量">文字</a> 那么对应的JS代码为: <script type="text/javascript"> function GetID(obj) { //alert(obj....
  • JQuery 获取动态id input的value

    千次阅读 2018-05-21 20:05:31
    id="&lt;s:property value="#s.id" /&gt;count" value="&lt;s:property value="#s.count" /&gt;" /&gt;jsvar count = $("#"+pid+"...
  • js拼接字符串,动态id

    千次阅读 2019-01-21 11:13:01
    var str = '';  str += '&lt;tr style="vertical-align: middle ... id="'+hanghao+'"&gt;';  str += '&lt;td class="width-5 active"&gt;&lt;input type="check.
  • jquery 通过动态id name等获取标签

    千次阅读 2016-09-30 15:33:44
    一般jquery获取标签:$('#id'),$('name'),$('.class') 如果id,name,不确定时,如:在java或js中编辑 "" i为动态时,此时jquery获取此input就要这样:$("input[name='test["+i+"]']"),同理id也一样

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 32,074
精华内容 12,829
关键字:

动态id