hatty large avatar

hatty

测试学习小组 第 494 号会员, 加入于 2017-12-20 11:03:28 AM
hatty 最近创建的话题
selenium如何定位,点击之后才出现的元素
python selenium   •   一年前   •   最后回复来自 乙醇
5
hatty 最近的回复
一年前
回复了 乙醇 创建的话题 pyse16作业
```python import unittest from selenium import webdriver from sys import argv import uuid from selenium.webdriver.common.action_chains import ActionChains from time import sleep class PostCase(unittest.TestCase): def setUp(self): self.script, self.ip, self.username, self.password = argv self.dr = webdriver.Chrome() self.dr.get(self.ip) self.title = self.content = str(uuid.uuid4()) def login(self): self.goto('wp-login.php') sleep(1) self.by_id("user_login").send_keys(self.username) self.by_id("user_pass").send_keys(self.password) self.by_id("wp-submit").click() def create_post(self): self.goto('wp-admin/post-new.php') self.by_id('title').send_keys(self.title) self.set_content(self.content) self.by_id('publish').click() def test_edit_post(self): self.login() get_id = self.get_postID() self.goto('wp-admin/edit.php') row_id = 'post-' + get_id post_ele = self.by_id(row_id) ActionChains(self.dr).move_to_element(post_ele).perform() post_ele.find_element_by_css_selector('span.edit>a').click() self.by_id('title').send_keys("Edit") self.by_id('publish').click() self.goto('wp-admin/edit.php') new_title = self.dr.find_element_by_class_name('row-title').text self.assertEqual(self.content + "Edit",new_title) def test_view_post(self): self.login() post_id = self.get_postID() self.goto('wp-admin/edit.php') row_id = 'post-' + post_id post_ele = self.by_id(row_id) ActionChains(self.dr).move_to_element(post_ele).perform() post_ele.find_element_by_css_selector('span.view>a').click() view_title = self.dr.find_element_by_class_name("entry-title").text view_content = self.dr.find_element_by_class_name("entry-content").text self.assertEqual(view_title,self.title) def get_postID(self): self.create_post() return self.dr.current_url.split('=')[1].split('&')[0] def set_content(self,text): js = 'document.getElementById("content_ifr").contentWindow.document.body.innerHTML="%s"' %(text) self.dr.execute_script(js) def goto(self,path): return self.dr.get(self.ip+ path) def by_id(self, the_id): return self.dr.find_element_by_id(the_id) def by_css(self, css): return self.dr.find_element_by_css_selector(css) def tearDown(self): self.dr.quit() if __name__ == '__main__': suite = unittest.TestSuite() suite.addTest(PostCase('test_edit_post')) suite.addTest(PostCase('test_view_post')) runner = unittest.TextTestRunner() runner.run(suite) ```
一年前
回复了 hatty 创建的话题 selenium如何定位,点击之后才出现的元素
呀呀呀,解决了,用的presence_of_element_located这个方法。。。 但是不太理解 ```python 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那个元素的代码 ```python 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和显示等待不是同等的作用呢?
一年前
回复了 hatty 创建的话题 selenium如何定位,点击之后才出现的元素
@乙醇 又有一个相似的新问题。。。 有一个表单是通过点击按键后显示的(下面图片展示),然后这个表单里面有一个和上面的一样的下拉列表,可是我在这里用WebDriverWait之后,在webDriverWait那行执行的时候,报【selenium.common.exceptions.TimeoutException: Message:】这样的错。 https://wx1.sinaimg.cn/mw690/91e40994gy1fmsvltoa5jj21120bywer.jpg https://wx2.sinaimg.cn/mw690/91e40994gy1fmsyvqoj94j20l40bh74s.jpg (表单也是点击之后,html里面才会出现) 我有尝试在按键点击之后加一个ui.WebDriverWai,但是感觉问题不是出在这里,因为我加不加,都下拉列表都是可以点击出来的,其他的不是下拉列表的元素也都可以定位的到。所以这种情况下,我要怎么才能定位到那个下拉的列表呢?
一年前
回复了 hatty 创建的话题 selenium如何定位,点击之后才出现的元素
谢谢乙醇,问题解决了^0^
测试学习小组 — 软件测试学习讨论区
现在注册
已注册用户请 登入

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


小贴士

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