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