多测师是一家拥有先进的教学理念,强大的师资团队,业内好评甚多的接口自动化测试培训机构!

17727591462

联系电话

您现在所在位置:接口自动化测试培训 > 新闻资讯

python(2.7)+selenium(3.0)+chrome(57)定位动态ID-自动化测试

更新时间:2023-01-29 09:33:36 作者:多测师 浏览:48

我们在进行自动化测试,定位元素常用的做法就是,右键--copy---copy xpath,因为这种方法简单,不用动脑筋,很多时候这种方法是行的通,但有时会遭遇滑铁卢,怎么运行都run不起来,甚至第一次可以run,第二次not run.今天可以,过段时间就不行。看看浏览器没有升级啊,怎么会呢?这就是动态id惹得祸。怎样才知道是不是动态id,打开一个窗口,定位元素,关闭后重新打开。看看定位同一个元素的id是否一致,不一致就是动态id。如下面的html是一个点击一个保存按钮后,定位弹出提示框中的”是“的元素,id动态变化,第一次用id可以run,第二次就报错!!!

python(2.7)+selenium(3.0)+chrome(57)定位动态ID-自动化测试

<td class="x-btn-mc">

   <em class="" unselectable="on"> 

       <button type="button" id="ext-gen374" class=" x-btn-text">是</button>

   </em>

</td>

way1:driver.find_element_by_id("ext-gen374").click()  错错错

way2:driver.find_element_by_xpath('//*[@id="ext-gen374"]').click() 还是错错错

way3:driver.find_element_by_xpath("//button[text()='是']").click()  对!对!!对!!!

way4:driver.find_element_by_xpath("//button[contain(text(),'是')]").click() 对!!!

又有人会问,如果不是button,咋办,一样的,div/span,替换button,ok!!!

不是动态id的话,无法定位元素,主要从frame(没有转换框架driver.switch_to_frame(framename)),时间等待(时间停顿过少)这两个原因考虑。其它很少见,至于定位元素的方法网上一搜一大堆,我就不在这里献丑。

还有一种很特殊情况,就是有一种文本框,你必须单击之后,它才会出现输入框,才能输入文本,也就是你单击它时定位元素1,弹出文本框时,定位元素2,这两个定位是不一样的。当初用火狐seleniumIDE录制时,单击和定位的元素是一样,放在pycharm中,始终报错,提示can not focus element 或can not find element!!!

way1:使用两个不同元素定位

driver.find_element_by_xpath(元素1).click()

time.sleep(2)

driver.find_element_by_xpath(元素2).send_keys('1000')

way2:

pa=driver.find_element_by_xpath(元素1).click()

actions=webdriver.ActionChains(driver)

actions.move_to_element(pa)

actions.click()

actions.send_keys('1000')

actions.perform()

记得开头引用selenium.webdriver.common.action_chainsimportActionChains

这两种方法都可以,任你自己选择。

也可以使用下面方法

利用//span[contains(@class,'vote-post-up')] class中的任何一个值

以上内容为大家介绍了自动化测试中的python(2.7)+selenium(3.0)+chrome(57)定位动态ID,本文由多测师亲自撰写,希望对大家有所帮助。了解更多自动化测试相关知识:https://www.aichudan.com/xwzx/

联系电话

17727591462

返回顶部