Selenium with Python-如何使其一次填写一个文本框

时间:2019-10-22 01:27:00

标签: python selenium selenium-webdriver selenium-chromedriver

我正在使用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()

1 个答案:

答案 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
        }
    }
}