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,第二次就报错!!!
<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/