Не могу найти элемент на странице с фреймом, Python Webdriver


(Клочанов Александр) #1

Пишу на python+webdriver (среда Pychram)
не могу найти элемент на странице.
Например есть страница
http://www.devart.com/dbforge/sql/studio/docs/index.html?welcome_to_dbforge_studio.htm

пробовал так

from selenium import webdriver
import unittest, time, re

class Untitled(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Firefox()
        self.driver.implicitly_wait(30)
        self.base_url = "http://www.devart.com/dbforge/sql/studio/docs/index.html?welcome_to_dbforge_studio.htm"

    def test_1(self):
        driver = self.driver
        driver.get(self.base_url)
        driver.implicitly_wait(6)
        driver.find_element_by_xpath(".//*[@id='TOGGLE0186A2']/table/tbody/tr/td/div/table/tbody/tr[1]/td[2]/p/a/span")

    def tearDown(self):
        self.driver.quit()

if __name__ == "__main__":
    unittest.main()

выдает ошибку

Error
Traceback (most recent call last):
  File "C:\Users\AlexK\PycharmProjects\untitled1\ssss.py", line 14, in test_1
    driver.find_element_by_xpath(".//*[@id='TOGGLE0186A2']/table/tbody/tr/td/div/table/tbody/tr[1]/td[2]/p/a/span")
  File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 230, in find_element_by_xpath
    return self.find_element(by=By.XPATH, value=xpath)
  File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 662, in find_element
    {'using': by, 'value': value})['value']
  File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 173, in execute
    self.error_handler.check_response(response)
  File "C:\Python27\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 164, in check_response
    raise exception_class(message, screen, stacktrace)
NoSuchElementException: Message: u'Unable to locate element: {"method":"xpath","selector":".//*[@id=\'TOGGLE0186A2\']/table/tbody/tr/td/div/table/tbody/tr[1]/td[2]/p/a/span"}' ; Stacktrace: 
    at FirefoxDriver.prototype.findElementInternal_ (file:///c:/users/alexk/appdata/local/temp/tmpdxwysi/extensions/fxdriver@googlecode.com/components/driver_component.js:9470:133)
    at fxdriver.Timer.prototype.setTimeout/<.notify (file:///c:/users/alexk/appdata/local/temp/tmpdxwysi/extensions/fxdriver@googlecode.com/components/driver_component.js:407:5)

В чем же причина? что я упустил и где можно с этим ознакомиться?


(Sergey Korol) #2

Причина в том, что ваш сайт сверстан из фреймов. Чтобы достучаться до элемента какого-либо фрейма, нужно вначале на него переключиться. По синтаксису питона не подскажу, на java это делается при помощи driver.switchTo().frame(yourFrame).


(Клочанов Александр) #3

Спасибо, помогло.
Может кому то будет нужно.
driver.switch_to.frame("name_frame")


(Mykhailo Poliarush) #4

@a_klochanov А вообще, пожалуйста прочтите http://automated-testing.info/faq как нужно называть тему и оформлять код. Чтобы можно было более быстро разбираться, что у вас не так.

А по вопросу, всегда когда видите фрейм, это правило, сначала надо на него переключиться, а потом уже с ним работать.