hatty large avatar
测试学习小组  ›  python selenium

selenium如何定位,点击之后才出现的元素

By hatty at 一年前 , 3220 次浏览


点击证件类型之后,出现下拉框,但是下拉框里面的元素定位不到


查看网页元素的时候,发现点击之后,才会出现下拉框里面的两个元素(图片上半部分是没有点击的时候的html,下半部分是点击后的html)

dr.find_element_by_css_selector("div[dict-data='certTypes']").click()

elements = dr.find_elements_by_css_selector("div[one-text='item[displayField]']")
print(len(elements))


这是我定位的脚本,第一行可以点击成功,但是定位下拉的元素,打印的结果是0。
请问这种元素要怎样定位?

5 回复
hatty medium avatar
#2 - 一年前
hatty

谢谢乙醇,问题解决了0^

hatty medium avatar
#3 - 一年前
hatty

@乙醇
又有一个相似的新问题。。。

有一个表单是通过点击按键后显示的(下面图片展示),然后这个表单里面有一个和上面的一样的下拉列表,可是我在这里用WebDriverWait之后,在webDriverWait那行执行的时候,报【selenium.common.exceptions.TimeoutException: Message:】这样的错。


(表单也是点击之后,html里面才会出现)

我有尝试在按键点击之后加一个ui.WebDriverWai,但是感觉问题不是出在这里,因为我加不加,都下拉列表都是可以点击出来的,其他的不是下拉列表的元素也都可以定位的到。所以这种情况下,我要怎么才能定位到那个下拉的列表呢?

hatty medium avatar
#4 - 一年前
hatty

呀呀呀,解决了,用的presence_of_element_located这个方法。。。
但是不太理解

css = "ul.ui-select-choices.ui-select-choices-content.ui-select-dropdown.dropdown-menu"
locator = (By.CSS_SELECTOR, css)
dr.find_element_by_id("bankAdd").click()
dr.find_element_by_css_selector("div[dict-data='bankTypes']").click()
WebDriverWait(dr, 10).until(EC.presence_of_element_located(locator))
dr.find_elements_by_class_name("ui-select-choices-row-inner")[0].click()

这个是我后来能click那个元素的代码

dr.find_element_by_id("bankAdd").click()
dr.find_element_by_css_selector("div[dict-data='bankTypes']").click()
WebDriverWait(dr, 10).until(lambda the_driver: the_driver.find_element_by_css_selector('ul.ui-select-choices.ui-select-choices-content.ui-select-dropdown.dropdown-menu').is_displayed())
dr.find_elements_by_class_name("ui-select-choices-row-inner")[0].click()

这个是我解决一开始那个下拉框用的,在这里用就会报timeout,这是为什么?
还有一个问题,很多时候因为懒,会用sleep代替用显示等待,同样也是可以成功的,虽然可能执行效率不好,但是为什么这里sleep和显示等待不是同等的作用呢?

乙醇 medium avatar
#5 - 一年前
乙醇

这个是我解决一开始那个下拉框用的,在这里用就会报timeout,这是为什么?

这个要看一下执行时候究竟发生了什么

还有一个问题,很多时候因为懒,会用sleep代替用显示等待,同样也是可以成功的,虽然可能执行效率不好,但是为什么这里sleep和显示等待不是同等的作用呢?

sleep直接暂停脚本执行,显示等待是有条件的暂停

测试学习小组 — 软件测试学习讨论区
现在注册
已注册用户请 登入
内容分享
收藏此话题的成员
王娟 mini avatar

欢迎关注我们的公众号: 测试圈TC


小贴士

你的问题在测试教程网中能找到答案