Как и другие ответы, вы не можете назначить параметр «error», потому что это константа (допустимая переменная, если вы это сделаете). Теперь вы можете спуститься по пути модификации функции, чтобы вернуться в качестве строки, как было предложено, но вам было бы лучше использовать более структурированный подход и фактически выбросить ошибку.
Что-то вроде этого:
enum sumbissionErrors: Error {
case noName
case noLastName
case noEmail
case noPassword
var description: String {
switch self {
case .noName:
return "Name cannot be empty"
case .noLastName:
return "Last name cannot be empty"
case .noEmail:
return "Email cannot be empty"
case .noPassword:
return "Password cannot be empty"
}
}
}
func submitData() throws {
if nameText.text == nil || nameText.text!.isEmpty {
throw sumbissionErrors.noName
}
if lastNameText.text == nil || lastNameText.text!.isEmpty {
throw sumbissionErrors.noLastName
}
if emailText.text == nil || emailText.text!.isEmpty {
throw sumbissionErrors.noEmail
}
if passwordText.text == nil || passwordText.text!.isEmpty {
throw sumbissionErrors.noPassword
}
// Do whatever you want now that the data is valid.
}
@IBAction func submitButton(_ sender: UIButton) {
do {
try submitData()
}
catch {
if let sumbmissionError = error as? sumbissionErrors {
switch sumbmissionError {
case .noName:
nameErrLbl.text = sumbmissionError.description
case .noLastName:
lastNameErrLbl.text = sumbmissionError.description
case .noEmail:
emailErrLbl.text = sumbmissionError.description
case .noPassword:
passwordErrLbl.text = sumbmissionError.description
}
} else {
// This will probably never happen but it indicates that some other more general error occured and needs to be handled here.
}
}
}
Это всего лишь пример, и, как и ваш оригинал, он будет только бросать первую ошибку, с которой он сталкивается. Возможно, вы захотите переструктурировать все, чтобы можно было пометить несколько ошибок. То есть возможно, что более одного из них могут быть пустыми.
Ваш кодовый блок был почти идеальным.
Это сообщение об ошибке ...
AttributeError: 'WebDriver' object has no attribute 'send_keys'
... подразумевает, что реализация WebDriver не имеет атрибута send_keys
selenium.webdriver.remote.webelement который представляет элемент DOM , содержит метод send_keys (* value) , который определен как:
send_keys(*value)
Simulates typing into the element.
, поэтому должен быть связан подходящий способ вызова send_keys()
на элемент следующим образом:
driver.find_element_by_css_selector("input.string").send_keys("Yuri")