我认为这个问题是独一无二的,因为这是专门针对Python而且与其他线程中提到的Java问题无关。
我正在浏览Selenium's documentation regarding explicit waits,但我无法创建代码来说明每个显式的等待用例。
以下示例有效(即返回True)
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
driver = webdriver.Firefox()
driver.get('https://www.google.com')
#match title tag
def title_is(driver, title, timeout=3):
try:
w = WebDriverWait(driver, timeout)
w.until(EC.title_is(title))
return True
except:
return False
print title_is(driver, 'Google',timeout=3)
但是下面的示例不起作用(我使用不同的显式等待条件)
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
driver = webdriver.Firefox()
driver.get('https://www.google.com')
#try to grab <div id="als">
def presence_of_element(driver, timeout=3):
try:
w = WebDriverWait(driver, timeout)
w.until(EC.presence_of_element_located(By.ID('als')))
return True
except:
return False
我已尝试过多种形式的语法,但除了title_is
外,我无法使任何明确的等待条件工作我非常感谢您的反馈,因为我显然在这里遗漏了一些东西。
由于
答案 0 :(得分:0)
presence_of_element_located
的语法不正确。它需要一个定位器类型By.ID
和值als
w.until(EC.presence_of_element_located((By.ID, 'als')))
请参阅: http://selenium-python.readthedocs.io/waits.html#explicit-waits
答案 1 :(得分:0)
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
import traceback
driver = webdriver.Firefox()
driver.get('https://www.google.com')
def error_catching():
traceback.print_stack()
print '--------------'
traceback.print_exc()
return False
#try to grab <div id="gbw">
def presence_of_element(driver, timeout=5):
try:
w = WebDriverWait(driver, timeout)
w.until(EC.presence_of_element_located((By.ID,'gbw')))
return True
except:
error_catching()