我有一個簡單的自動填充登錄表單域。事實上,它通過很好,但有問題。腳本填充字段後,我需要在控制檯中查看實際輸出,例如「已成功登錄」或「未找到用戶名」。我嘗試了很多東西,但沒有任何工作是這樣的,我的最後一次嘗試是while循環,並且效果很好,但只有當我有積極的結果。我寫了第二個條件,但是當我輸入不正確的數據時,它使我瘋狂地在我的控制檯中看到所有這些錯誤。所以這裏是代碼和輸出的一部分。硒2和python的問題3.4.1
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException
baseurl = "http://www.somesite/login"
email = input("Type an email: ")
password = input("Type a password: ")
xpaths = { 'loginBox' : "//input[@id='session_email']",
'passwordBox' : "//input[@id='session_password']",
'submitButton' : "//input[@class='ufs-but']",
'success' : "//div[@class='flash-message success']",
'error' : "//span[@class='form_error']"
}
mydriver = webdriver.Firefox()
mydriver.get(baseurl)
mydriver.find_element_by_xpath(xpaths['loginBox']).send_keys(email)
mydriver.find_element_by_xpath(xpaths['passwordBox']).send_keys(password)
mydriver.find_element_by_xpath(xpaths['submitButton']).click()
while mydriver.find_element_by_xpath(xpaths['success']):
print("Success")
if mydriver.find_element_by_xpath(xpaths['error']):
print("No")
還有就是我,當我嘗試中斷的錯誤:
File "ab.py", line 32, in <module>
while mydriver.find_element_by_xpath(xpaths['success']):
File "/usr/local/lib/python3.4/site-packages/selenium-2.43.0-py3.4.egg/selenium/webdriver/remote/webdriver.py", line 230, in find_element_by_xpath
return self.find_element(by=By.XPATH, value=xpath)
File "/usr/local/lib/python3.4/site-packages/selenium-2.43.0-py3.4.egg/selenium/webdriver/remote/webdriver.py", line 662, in find_element
{'using': by, 'value': value})['value']
File "/usr/local/lib/python3.4/site-packages/selenium-2.43.0-py3.4.egg/selenium/webdriver/remote/webdriver.py", line 173, in execute
self.error_handler.check_response(response)
File "/usr/local/lib/python3.4/site-packages/selenium-2.43.0-py3.4.egg/selenium/webdriver/remote/errorhandler.py", line 166, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: 'Unable to locate element: {"method":"xpath","selector":"//div[@class=\'flash-message success\']"}' ; Stacktrace:
at FirefoxDriver.prototype.findElementInternal_ (file:///tmp/tmpjax8kj1u/extensions/[email protected]/components/driver-component.js:9618:26)
at FirefoxDriver.prototype.findElement (file:///tmp/tmpjax8kj1u/extensions/[email protected]/components/driver-component.js:9627:3)
at DelayedCommand.prototype.executeInternal_/h (file:///tmp/tmpjax8kj1u/extensions/[email protected]/components/command-processor.js:11612:16)
at DelayedCommand.prototype.executeInternal_ (file:///tmp/tmpjax8kj1u/extensions/[email protected]/components/command-processor.js:11617:7)
at DelayedCommand.prototype.execute/< (file:///tmp/tmpjax8kj1u/extensions/[email protected]/components/command-processor.js:11559:5)
正如我所說的,全成的結果是沒有問題的。
UPD。我糾正我的代碼的最後一點點,現在我有這個:
while mydriver.find_element_by_xpath(xpaths['success']):
print("Success")
break
while mydriver.find_element_by_xpath(xpaths['error']):
print("No")
break
和它的作品,但不喜歡我想要的,輸出的時候我想陰性結果:
Type an email: w
Type a password: wer
Success
No
正如你所看到的,當結果是積極的時候,我想看到'成功',當它是消極時,'不',但我不想同時看到它們。
UPD。道具Macro Giancarli爲巨大的幫助,所以這就是我得到了我到底要:
try:
success = True
success_element = mydriver.find_element_by_xpath(xpaths['success'])
except NoSuchElementException:
success = False
print("Can't log in. Check email and/or password")
try:
failure = True
failure_element = mydriver.find_element_by_xpath(xpaths['error'])
except NoSuchElementException :
failure = False
print("Logged in successfully")