在Selenium(Python)-如何仅在上传文件后单击按钮?

在Selenium(Python)-如何仅在上传文件后单击按钮?,python,exception,selenium,selenium-webdriver,timeout,Python,Exception,Selenium,Selenium Webdriver,Timeout,使用Selenium时,我在上传文件后单击submit按钮时遇到问题。 在下面的演示代码中-仅当文件在g元素中完成上载后,才应单击submit元素。 然而,我似乎无法正确使用wait.until来实现上述目标。 也就是说,即使文件似乎已完全上载,但超时时间为30秒,文件仅为56kB-我得到以下超时异常: 异常时的屏幕截图 环境: 我只是在学硒 输入文本时,您是按ID定位元素,但对于检查点,您使用的是名称。你不应该在检查点中也使用ID吗?我认为这是一个玫瑰名的例子——但可能更像蟒蛇,我应该在引用

使用Selenium时,我在上传文件后单击submit按钮时遇到问题。 在下面的演示代码中-仅当文件在g元素中完成上载后,才应单击submit元素。 然而,我似乎无法正确使用wait.until来实现上述目标。 也就是说,即使文件似乎已完全上载,但超时时间为30秒,文件仅为56kB-我得到以下超时异常: 异常时的屏幕截图

环境:


我只是在学硒


输入文本时,您是按ID定位元素,但对于检查点,您使用的是名称。你不应该在检查点中也使用ID吗?

我认为这是一个玫瑰名的例子——但可能更像蟒蛇,我应该在引用方式上保持一致。谢谢。您的意思是元素具有相同的ID和名称属性吗?错误清楚地表明selenium在尝试查找元素时超时。Mae culpa:事实上,我用的是By.NAME而不是By.ID。然而,即使修复了这个错误,我仍然得到:回溯最近的调用last:File./stackoverflow\u selenium\u example.py,第51行,在主文件中。/stackoverflow\u selenium\u example.py,第42行,在main elem=wait.untelec.text\u to\u be\u present\u in\u element\u valueBy.ID,'g',fax[document]文件/usr/lib/python2.7/site-packages/selenium/webdriver/support/wait.py,第71行,在until raise TimeoutException Message selenium.common.exceptions.TimeoutException:Message:
sh-4.1$ ./stackoverflow_selenium_example.py 
Traceback (most recent call last):
  File "./stackoverflow_selenium_example.py", line 51, in <module>
    main()
  File "./stackoverflow_selenium_example.py", line 42, in main
    elem = wait.until(EC.text_to_be_present_in_element_value((By.ID,'g'),fax["document"]))
  File "/usr/lib/python2.7/site-packages/selenium/webdriver/support/wait.py", line 71, in until
    raise TimeoutException(message)
selenium.common.exceptions.TimeoutException: Message: '' 
sh-4.1$
#!/usr/bin/env python
# -*- coding: utf-8 -*-

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

AWHILE = 30
SHORT_TIME = 10

def main():
        url = "http://www.freefax.co.il"
        email = "a.b@c.com"

        fax = {}
        fax["document"] = r"C:\tmp\DevOpsTest.pdf"
        fax["description"] = "Example of selenium problem"
        fax["numbers"] = r"04-000-0001"

        driver = webdriver.Chrome()
        wait = WebDriverWait(driver, AWHILE)

        driver.get(url + os.sep + "upload.php")
        driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
        elem = driver.find_element_by_name("Desc")
        elem.send_keys(fax["description"])
        elem = driver.find_element_by_id("NumberList0")
        elem.send_keys(fax["numbers"])
        elem = driver.find_element_by_name("email")
        elem.send_keys(email)
        elem = driver.find_element_by_name("Yes")
        elem.click()

        driver.execute_script("window.scrollTo(0, 0);")
        elem = driver.find_element_by_id("g")
        elem.send_keys(fax["document"])
        elem = wait.until(EC.text_to_be_present_in_element_value((By.ID,'g'),fax["document"]))
        elem = wait.until(EC.element_to_be_clickable((By.NAME,'submit')))
        elem.click()

        # Show next screen for a short time.
        time.sleep(SHORT_TIME)
        driver.quit() # end the whole session.

if __name__ == "__main__":
    main()
Selenium: selenium (2.37.2) Chrome: Version 33.0.1750.154 m Cygein: CYGWIN_NT-6.1-WOW64 1.7.28(0.271/5/3) i686 Windows: 7 Ultimate