2016-09-19 4 views
0

Я пытаюсь использовать Selenium WebDriverWait в Python ждать элементов для загрузки на веб-странице, однако, с использованием любого ожидаемого состояния помимо presence_of_element_located, кажется, приводит к ошибкеPython Селен Явная функция WebDriverWait работает только с presence_of_element_located

selenium.common.exceptions.WebDriverException: Message: SyntaxError: missing) in parenthetical

Я думал, что это может быть связано с сайта я пытался против, но я получаю ту же ошибку на любом сайте - см Snippit ниже, где я заменил presence_of_element_located с visibility_of_element_located и пытаюсь сотрудничать nfirm видимость окна поиска на python.org.

from selenium import webdriver 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 
from selenium.webdriver.common.keys import Keys 

driver = webdriver.Firefox() 
driver.get("http://www.python.org") 

try: 
    element = WebDriverWait(driver, 5).until(EC.visibility_of_element_located((By.NAME,"q"))) 
    element.send_keys("pycon") 
    element.send_keys(Keys.RETURN) 
finally: 
    driver.quit() 

Полная трассировка стека, как показано ниже, Любая помощь будет оценена!

Traceback (most recent call last): 
    File "C:\dev\test.py", line 51, in <module> 
    element = WebDriverWait(driver, 5).until(EC.visibility_of_element_located((By.NAME,"q"))) 
    File "C:\Development\python\python35-32\lib\site-packages\selenium-3.0.0b3-py3.5.egg\selenium\webdriver\support\wait.py", line 71, in until 
    value = method(self._driver) 
    File "C:\Development\python\python35-32\lib\site-packages\selenium-3.0.0b3-py3.5.egg\selenium\webdriver\support\expected_conditions.py", line 78, in __call__ 
    return _element_if_visible(_find_element(driver, self.locator)) 
    File "C:\Development\python\python35-32\lib\site-packages\selenium-3.0.0b3-py3.5.egg\selenium\webdriver\support\expected_conditions.py", line 98, in _element_if_visible 
    return element if element.is_displayed() == visibility else False 
    File "C:\Development\python\python35-32\lib\site-packages\selenium-3.0.0b3-py3.5.egg\selenium\webdriver\remote\webelement.py", line 353, in is_displayed 
    self) 
    File "C:\Development\python\python35-32\lib\site-packages\selenium-3.0.0b3-py3.5.egg\selenium\webdriver\remote\webdriver.py", line 465, in execute_script 
    'args': converted_args})['value'] 
    File "C:\Development\python\python35-32\lib\site-packages\selenium-3.0.0b3-py3.5.egg\selenium\webdriver\remote\webdriver.py", line 236, in execute 
    self.error_handler.check_response(response) 
    File "C:\Development\python\python35-32\lib\site-packages\selenium-3.0.0b3-py3.5.egg\selenium\webdriver\remote\errorhandler.py", line 192, in check_response 
    raise exception_class(message, screen, stacktrace) 
selenium.common.exceptions.WebDriverException: Message: SyntaxError: missing) in parenthetical 

Update -> Через несколько комментариев ниже я сделал некоторые тесты на версию и браузерах, и этот вопрос, кажется, изолированный на Python 3 и Firefox, скрипт работает с Python 2.7 и работает на оба версиях питона для Chrome webdriver.

+0

Я считаю, вы должны выберите веб-драйвер aka chrome, firefox и т. д. – thesonyman101

+0

@ w-enzo OP уже выбрал Firefox как веб-драйвер. –

+0

Копировать/Вставить тот же код, он работает для меня. Я использую Python 2.7. –

ответ

0

Скопируйте вставку того же кода, и он работает. У Dint достаточно репо для комментариев, поэтому пришлось поместить его в раздел ответов.

0

Эти незначительные изменения работают для меня.

  1. visibility_of_element_located ===> presence_of_element_located
  2. driver.quit() ===> driver.close()

Смотрите следующее:

from selenium import webdriver 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 
from selenium.webdriver.common.keys import Keys 

driver = webdriver.Firefox() 
driver.get("http://www.python.org") 

try: 
    element = WebDriverWait(driver, 5).until(EC.presence_of_element_located((By.NAME,"q"))) 
    element.send_keys("pycon") 
    element.send_keys(Keys.RETURN) 
finally: 
    driver.close() 
+0

Существует разница между видимостью и присутствием, поэтому нельзя заменить другую. –