selenium2切换窗口失败

#conding=utf-8
from selenium import webdriver
import time

driver=webdriver.Chrome()
driver.implicitly_wait(10)
driver.get("http://www.baidu.com")

search_windows=driver.current_window_handle

driver.find_element_by_link_text(u'登录').click()
driver.find_element_by_link_text(u'立即注册').click()

all_handles=driver.window_handles

#进入注册窗口
for handle in all_handles:
    if handle !=search_windows:
       driver.switch_to.window(search_windows)
       print ('now registerwindow!')
       driver.find_element_by_name("account").send_keys('username')
       driver.find_element_by_name('password').send_keys('password')
       time.sleep(2)
#进入搜索窗口
for handle in all_handles:
    if handle ==search_windows:
       driver.switch_to.window(search_windows)
       print ('now sreachwindow!')
       driver.find_element_by_id('TANGRAM__PSP_2__closeBtn').click()
       driver.find_element_by_id("kw").send_keys("selenium")
       driver.find_element_by_id("su").click()
       time.sleep(2)

driver.quit()

控制台信息:

now registerwindow!
Traceback (most recent call last):
  File "F:/Deployment/Python/Selenium2/Part2/baidu5.py", line 20, in <module>
    driver.find_element_by_name("account").send_keys('username')
  File "C:\development\python351\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 330, in find_element_by_name
    return self.find_element(by=By.NAME, value=name)
  File "C:\development\python351\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 712, in find_element
    {'using': by, 'value': value})['value']
  File "C:\development\python351\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 201, in execute
    self.error_handler.check_response(response)
  File "C:\development\python351\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 181, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"name","selector":"account"}
  (Session info: chrome=53.0.2785.143)
  (Driver info: chromedriver=2.24.417431 (9aea000394714d2fbb20850021f6204f2256b9cf),platform=Windows NT 10.0.14393 x86_64)


Process finished with exit code 1
阅读 3.8k
1 个回答

整体思路是对的,用法也比较高级;
但是代码有写错哦:
1.既然你的逻辑是如果当前handle不是搜索页面,那就跳转到注册页面,那么此处代码应改为:

#进入注册窗口
for handle in all_handles:
    if handle !=search_windows:
       driver.switch_to.window(handle)
       print ('now register window!')

2.既然你在注册页面输入,那么就应该获取注册页面的元素,而不是登录页面:

for handle in all_handles:
    if handle !=search_windows:
       driver.switch_to.window(handle)
       print ('now registerwindow!')
       driver.find_element_by_name("userName").send_keys('username')
       driver.find_element_by_name('phone').send_keys('password')
       ……
       time.sleep(2)

帮你修改了一下:

#conding=utf-8
from selenium import webdriver
import time

driver=webdriver.Chrome()
driver.implicitly_wait(10)
driver.get("http://www.baidu.com")

search_windows=driver.current_window_handle

driver.find_element_by_link_text(u'登录').click()
driver.find_element_by_link_text(u'立即注册').click()

all_handles=driver.window_handles

#进入注册窗口
for handle in all_handles:
    if handle !=search_windows:
       driver.switch_to.window(handle)
       print ('now registerwindow!')
       driver.find_element_by_name("userName").send_keys('username')
       driver.find_element_by_name('phone').send_keys('password')
       time.sleep(2)
#进入搜索窗口
for handle in all_handles:
    if handle ==search_windows:
       driver.switch_to.window(search_windows)
       print ('now sreachwindow!')
       driver.find_element_by_id('TANGRAM__PSP_2__closeBtn').click()
       driver.find_element_by_id("kw").send_keys("selenium")
       driver.find_element_by_id("su").click()
       time.sleep(2)

driver.quit()
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题