ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python – 即使元素存在,WebdriverWait也会失败

2019-07-15 10:57:16  阅读:450  来源: 互联网

标签:python selenium-webdriver xpath selenium html


这是我的代码:

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元素,我会抛出几个可能感觉不合适的打印语句.

编辑:当我删除我的try语句时,我收到此错误.

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并查看引发的错误类型.

标签:python,selenium-webdriver,xpath,selenium,html
来源: https://codeday.me/bug/20190715/1466882.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有