51Testing软件测试论坛

标题: python+selenium 如何定位隐藏的页面元素 [打印本页]

作者: 若希晴    时间: 2016-8-30 21:13
标题: python+selenium 如何定位隐藏的页面元素
本帖最后由 若希晴 于 2016-8-31 09:46 编辑

新手上路~~求问如何使用python+selenium定位隐藏的页面元素
如:定位【百度首页】-【设置】-【搜索设置】
代码:
#coding:utf-8
from selenium import webdriver
import time

driver=webdriver.Chrome()
driver.implicitly_wait(30)
driver.get('https://www.baidu.com/')
driver.maximize_window()

driver.find_element_by_link_text(u"设置").click()
time.sleep(5)
driver.find_element_by_xpath("/html/body/div[3]/div[5]/a[1]").click()
driver.quit()

报错:
Traceback (most recent call last):
  File "F:/hello.py", line 12, in <module>
    driver.find_element_by_xpath("/html/body/div[3]/div[5]/a[1]").click()
  File "D:\Python27\lib\site-packages\selenium\webdriver\remote\webelement.py", line 72, in click
    self._execute(Command.CLICK_ELEMENT)
  File "D:\Python27\lib\site-packages\selenium\webdriver\remote\webelement.py", line 461, in _execute
    return self._parent.execute(command, params)
  File "D:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 236, in execute
    self.error_handler.check_response(response)
  File "D:\Python27\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 192, in check_response
    raise exception_class(message, screen, stacktrace)
ElementNotVisibleException: Message: element not visible
  (Session info: chrome=51.0.2704.106)
  (Driver info: chromedriver=2.9.248315,platform=Windows NT 6.1 SP1 x86)


之后修改成:
#coding:utf-8
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time

driver=webdriver.Chrome()
driver.implicitly_wait(30)
driver.get('https://www.baidu.com/')
driver.maximize_window()

ele=driver.find_element_by_link_text(u"设置")
ActionChains(driver).move_to_element(ele).perform()
time.sleep(5)
driver.find_element_by_xpath("/html/body/div[3]/div[5]/a[1]").click()
time.sleep(5)
driver.quit()

第一次运行未报错,第二次运行仍出现和上面一样的错误  
求大神指点~~~
作者: 若尘_51    时间: 2016-8-31 08:30
你第一个的脚本没问题:
#coding:utf-8
from selenium import webdriver
import time

driver=webdriver.Chrome()
driver.implicitly_wait(30)
driver.get('https://www.baidu.com/')
driver.maximize_window()

driver.find_element_by_link_text(u"设置").click()
time.sleep(5)
driver.find_element_by_xpath("/html/body/div[3]/div[5]/a[1]").click()
time.sleep(5)
driver.quit()

第一个脚本加个延时,一直都可以啊。

作者: 若希晴    时间: 2016-8-31 09:39
若尘_51 发表于 2016-8-31 08:30
你第一个的脚本没问题:
#coding:utf-8
from selenium import webdriver

不可以啊  报错:
    raise exception_class(message, screen, stacktrace)
ElementNotVisibleException: Message: element not visible
  (Session info: chrome=51.0.2704.106)
  (Driver info: chromedriver=2.9.248315,platform=Windows NT 6.1 SP1 x86_64)
作者: 若尘_51    时间: 2016-8-31 09:55
若希晴 发表于 2016-8-31 09:39
不可以啊  报错:
    raise exception_class(message, screen, stacktrace)
ElementNotVisibleExcepti ...

好吧 我错了。 确实有这种情况,是因为第一个延时太久了,导致那个选项隐藏了,将延时设小点:
time.sleep(0.5)
driver.find_element_by_xpath("/html/body/div[3]/div[5]/a[1]").click()
time.sleep(5)
作者: 掉渣饼    时间: 2016-8-31 13:10
试试下面的方法
#coding:utf-8
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.ui import WebDriverWait
import time

driver=webdriver.Chrome()
driver.implicitly_wait(30)
driver.get('https://www.baidu.com/')
driver.maximize_window()
time.sleep(5)
#点击设置链接
driver.find_element_by_link_text(u"设置").click()
#找到搜索设置的父元素
WebDriverWait(driver,10).until(lambda the_driver:
the_driver.find_element_by_class_name('bdpfmenu').is_displayed())
#在父元素下找到搜索设置
ComboBox=driver.find_element_by_class_name('bdpfmenu').find_element_by_class_name('setpref')
#鼠标定位到搜索设置并双击
ActionChains(driver).double_click(ComboBox).perform()
time.sleep(5)
driver.quit()

作者: 若希晴    时间: 2016-8-31 19:43
若尘_51 发表于 2016-8-31 09:55
好吧 我错了。 确实有这种情况,是因为第一个延时太久了,导致那个选项隐藏了,将延时设小点:
time.sle ...

延时设小,还是报一样的错误╮(╯_╰)╭
作者: 若希晴    时间: 2016-8-31 19:43
掉渣饼 发表于 2016-8-31 13:10
试试下面的方法
#coding:utf-8
from selenium import webdriver

可以了~非常感谢




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2