我正在使用Selenium和Python登录网站,因此它必须将用户名传递给一个文本框,然后将密码传递给另一个文本框。填写用户名时,它有时会在同一文本框中开始输入密码(通常不会在其中输入完整的密码,只输入一部分)。就像它尝试输入太快,然后在选择密码文本框之前开始输入密码。如何获得按顺序输入文本的信息?
from selenium import webdriver
driver = webdriver.Chrome(executable_path=Config.driver_path)
driver.get(Config.start_url)
driver.find_element_by_xpath('//someXPathToUsername').send_keys(Config.username)
driver.implicitly_wait(Config.driver_wait_time)
driver.find_element_by_xpath('//someXPathToPassword').send_keys(Config.password)
driver.implicitly_wait(Config.driver_wait_time)
driver.find_element_by_xpath('//someXPathToLoginButton').click()
答案 0 :(得分:0)
您需要对其进行设置,以便它查找您要定位的div的类或ID See more here about Selenium Locating Elements,我认为这是您的问题,它不知道要定位的目标然后执行该操作完全错误。
看看我做的以下代码
public class RegistrationDataActivity extends AppCompatActivity {
private MaterialButton mbregister;
private EditText editName;
private EditText editEmail;
private EditText editTextMobile;
private EditText editPassword;
private EditText editConfirmPassword;
private EditText editTextPone;
private AwesomeValidation awesomeValidation;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_registration_data);
initializeComponents();
eventButton();
/* A biblioteca fornece
* 3 tipos de validação
* BASIC
* CORAÇÃO
* UNDERLABEL**/
//definindo o objeto AwesomeValidationject
awesomeValidation = new AwesomeValidation(ValidationStyle.BASIC);
addValidationToViews();
}
private void addValidationToViews() {
//padrão de validação
String patternPassword = "^[A-Za-z\\s]{3}[0-9]{3}$";
String patternTelepone = "^[0-9]{2}[0-9]{8}$";
String patternName = "[a-zA-Z\\\\s]+";
//adicionando validação ao edittexts
awesomeValidation.addValidation(this, R.id.et_name, patternName, R.string.nameerror);
awesomeValidation.addValidation(this, R.id.et_email, Patterns.EMAIL_ADDRESS, R.string.emailerror);
awesomeValidation.addValidation(this, R.id.et_password_register, patternPassword, R.string.passworderror);
awesomeValidation.addValidation(this, R.id.et_confirm_password, patternPassword, R.string.passworderror);
awesomeValidation.addValidation(this, R.id.et_telephone, patternTelepone, R.string.mobileerror);
awesomeValidation.addValidation(this, R.id.et_confirm_phone, patternTelepone, R.string.mobileerror);
}
private void initializeComponents() {
mbregister = findViewById(R.id.btn_send);
//initializing view objects
editName = findViewById(R.id.et_name);
editEmail = findViewById(R.id.et_email);
editTextMobile = findViewById(R.id.et_telephone);
editPassword = findViewById(R.id.et_password_register);
editConfirmPassword = findViewById(R.id.et_confirm_password);
editTextPone = findViewById(R.id.et_confirm_phone);
//ADD Toobar
Toolbar toolbar = findViewById(R.id.mt_toolbar_reditration_data);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
private void eventButton() {
mbregister.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
submitForm();
}
});
}
private void submitForm() {
// primeiro valide o formulário e siga em frente
// se isso for verdade, significa que a validação é bem-sucedida
if (awesomeValidation.validate()) {
Toast.makeText(this, "Registro bem-sucedido", Toast.LENGTH_LONG).show();
Intent i = new Intent(RegistrationDataActivity.this, ConfirmationCodeActivity.class);
startActivity(i);
// processa os dados ainda mais
}
}
}