Как нажать кнопку (с одинаковым именем) с несколькими разными атрибутами на разных страницах? - PullRequest
2 голосов
/ 01 октября 2019

Я пытаюсь создать скрипт, который будет нажимать одну и ту же кнопку с именем на нескольких страницах, но кнопки имеют разные атрибуты. У некоторых есть идентификатор, какое-то имя, какое-то значение и некоторые данные в качестве идентификатора. Эта функция должна иметь список атрибутов, и когда я запускаю скрипт, она должна войти в этот список, нажать кнопку и перейти к следующему шагу. Моя проблема здесь в том, что когда одна из кнопок имеет 2 атрибута в списке, она щелкает дважды. Это проблема, которую я пытаюсь решить.

Я пытался попытаться поймать функцию, но и некоторые другие, которые я точно не знаю, так как я новичок в этом. Функция «Попробуй и поймай» работает для нажатия, но не для того, чтобы избежать двойного щелчка.

Моя функция «Попробуй и поймай»

    public void jeg_trykker_på_knap(String knap) {
        switch (knap) {

case "Slet":
            try { 
                driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
                driver.findElement(By.xpath("//*[@data-contribution-title='Din indberetning slettes']")).click();
                driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
                } catch ( Exception a) {

                }
            try {    
                driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
                driver.findElement(By.xpath("//*[@id='slet']")).click();
                driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
                } catch ( Exception b) {

                }
            try {   
                driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
                driver.findElement(By.xpath("//*[@value='Slet']")).click();
                driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
                } catch ( Exception c) {

                }
            try {   
                driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
                driver.findElement(By.xpath("//button[text()='Slet']")).click();
                driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
                } catch ( Exception d) {

            try {   
                driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
                driver.findElement(By.xpath("//*[@name='Slet']")).click();
                driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
                } catch ( Exception e) {
                }   
                }           
            break;

1 Ответ

2 голосов
/ 01 октября 2019

Вы можете использовать условие ИЛИ XPATH.

Пример, как показано ниже:

//*[@value='Slet'] | //*[@name='Slet']

В приведенном выше примере | обозначает ИЛИ

Таким образом, вы нене нужно писать другой код и переключаться

Создайте свой Xpath в соответствии с примером xpath, который я показал

Источник:

Использование условия ИЛИ в Xpath дляидентифицировать тот же элемент

...