这是我的代码:
def CheckQueue(driver):
qdone = False
qID_xpath_start = "/html/body/div[5]/form/table/tbody[1]/tr["
qID_xpath_end = "]/td[2]/a"
qIdindex = 1
while qdone == False:
print "enter loop"
print driver.find_element_by_xpath(qID_xpath_start+str(qIdindex)+qID_xpath_end).text #This prints
try:
element = webdriverwait(driver, 6000).until(ec.presence_of_element_located(By.XPATH((qID_xpath_start+str(qIdindex)+qID_xpath_end)))) #This fails
print "found"
except:
qdone= True
print "Could not be found"
print driver.find_element_by_xpath(qID_xpath_start+str(qIdindex)+qID_xpath_end).text
if qdone == False:
print driver.find_element_by_xpath(qID_xpath_start+str(qIdindex)+qID_xpath_end).text
print "testing"
qIdindex +=1
print "loop"
return driver
我得到这个返回(14453是我正在寻找的xpath的链接文本)
enter loop
14453
Could not be found
14453
loop
看来我的代码能够找到链接,但是当被要求检查链接是否存在时,它会失败,并激活except语句.如果已经找到并打印出来,它为什么会失败?
此外,它几乎立即失败,即使我已经分配了这么多时间来看.
知道我哪里错了吗?
我试过了
element = webdriverwait(driver, 6000).until(ec.presence_of_element_located(By.XPATH((qID_xpath_start+str(qIdindex)+qID_xpath_end))))
element = webdriverwait(driver, 6000).until(EC.presence_of_element_located(By.XPATH((qID_xpath_start+str(qIdindex)+qID_xpath_end))))
element = webdriverwait(driver, 6000).until(ec.presence_of_element_located(By.XPATH, qID_xpath_start+str(qIdindex)+qID_xpath_end))
element = webdriverwait(driver, 6000).until(ec.presence_of_element_located(By.xpath, qID_xpath_start+str(qIdindex)+qID_xpath_end))
我使用的是Python 2.7,Selenium 2.43,Firefox 23.0.3
顺便说一句,为了测试是否可以在某些点找到xpath元素,我会抛出几个可能感觉不合适的打印语句.
element = webdriverwait(driver, 6000).until(EC.presence_of_element_located(By.XPATH((qID_xpath_start+str(qIdindex)+qID_xpath_end))))
NameError:未定义全局名称“By”
我的代码中有以下import语句:
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.ui import webdriverwait # available since 2.4.0
from selenium.webdriver.support import expected_conditions as EC # available since 2.26.0
from selenium.webdriver.support.ui import Select
from selenium.webdriver.common.action_chains import ActionChains
我假设我确实需要添加一个import语句,但我似乎无法找到我如何导入By.
我试过了:
from selenium.webdriver.common.by import By
element = webdriverwait(driver, 6000).until(EC.presence_of_element_located(By.XPATH((qID_xpath_start+str(qIdindex)+qID_xpath_end))))
TypeError: ‘str’ object is not callable
然后我更新了我的webdriverwait行以反映alecxe的建议.
element = webdriverwait(driver, 6000).until(EC.presence_of_element_located((By.XPATH, qID_xpath_start+str(qIdindex)+qID_xpath_end)))
现在它似乎正在起作用.
解决方法:
WebDriverWait
expression syntax不正确,它应该是:
webdriverwait(driver, 60).until(ec.presence_of_element_located((By.XPATH, qID_xpath_start+str(qIdindex)+qID_xpath_end)))
注意元组传递给presence_of_element_located()方法.
注意60这里是60秒.
此外,为了成功调试并了解正在发生的事情,让它失败通常会有所帮助 – 删除try / except并查看引发的错误类型.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。