Как нажать на кнопку «Деактивировать», а затем на кнопку «Активировать» через Selenium и Java - PullRequest
0 голосов
/ 07 января 2019

Эта же кнопка используется для активации и деактивации. Первый раз, когда кнопка запуска кода нажата и «деактивирована» успешно. Но во второй раз код не может найти элемент. Кнопка первого регистра находится во втором теге «a», а затем деактивирована, если кнопка находится в первом теге «a».

Дело 1:

<td>
  <a class="btn btn-success btn-sm fa fa-edit" href="/ClassDetails/Edit?ClassID=CLSS1012201800050">Edit </a>
  <a class="btn btn-danger btn-sm fa fa-trash-o" href="/ClassDetails/Deactivate?ClassID=CLSS1012201800050">Deactivate</a>
</td>

Случай 2:

<td>
  <a class="btn btn-info btn-sm  fa fa-check-square-o" href="/ClassDetails/Activate?ClassID=CLSS1012201800050">Activate</a>
</td>   

Xpath =

WebElement deactivatebutton = driver.findElement(By.xpath("//*[@id='tblClassName']/tbody/tr[2]/td[4]/a[2]"));
//WebElement activatebutton = driver.findElement(By.xpath("//*[@id='tblClassName']/tbody/tr[2]/td[4]/a"));

Ответы [ 6 ]

0 голосов
/ 24 января 2019

Здесь вы можете использовать два подхода:

  1. Вы можете использовать два xpath, по одному для кнопки «Активировать» и «Деактивировать», используя их текст, например:

    WebElement activateButton = driver.findElement(By.xpath("//a[text()='Activate']"));<br> WebElement deactivateButton = driver.findElement(By.xpath("//a[text()='Deactivate']"));

  2. Сделайте его параметризованным, сделав метод click и отправив на него текст своей кнопки, это будет более полезным, так как вы можете использовать этот метод для любой кнопки, присутствующей на вашей веб-странице (с таким же типом xpath) ,

    WebElement element;<br> public void clickElement(String elementText){<br> element = driver.findElement(By.xpath("//a[text()="+elementText+"]"));<br> element.click();<br> }

А затем вызвать метод, например clickElement("Activate"); или clickElement("Deactivate");

0 голосов
/ 09 января 2019

Не очищена моя проблема. Пожалуйста, проверьте вложение. Собираетесь нажать кнопку Деактивировать

После деактивации, снова второй прогон кода, нажав кнопку активации данных. В этом случае одна кнопка

Раньше я писал код ниже. Это нормально работает. Но я знаю, что это недопустимо. Мне нужно деактивировать и активировать одну и ту же кнопку в двух разных прогонах.

try {

        boolean deactivatebutton = driver.findElement(By.xpath("//*[@id='tblClassName']/tbody/tr[2]/td[4]/a[2]")).isDisplayed();
         WebElement dbutton = driver.findElement(By.xpath("//*[@id='tblClassName']/tbody/tr[2]/td[4]/a[2]"));
            dbutton.click();
        }

     catch(Exception e) {
    boolean activatebuttonpresent =  driver.findElement(By.xpath("//*[@id='tblClassName']/tbody/tr[2]/td[4]/a")).isEnabled();

          driver.findElement(By.xpath("//*[@id='tblClassName']/tbody/tr[2]/td[4]/a")).click();
0 голосов
/ 07 января 2019

Так как это ссылка, можно использовать локатор текстовых ссылок

// to activate
driver.findElement(By.linkText("Activate")).click();
//to deactivate
driver.findElement(By.linkText("Deactivate")).click();
0 голосов
/ 07 января 2019

Мое решение будет заключаться в создании простых стратегий локатора на основе доступных атрибутов :

  • Нажмите на Отключить ссылку:

    • CSSSelector

      driver.findElement(By.cssSelector("a.btn.btn-danger.btn-sm.fa.fa-trash-o[href^='/ClassDetails/Deactivate?ClassID=']")).click();
      
    • * 1023 XPath *:

      driver.findElement(By.xpath("//a[@class='btn btn-danger btn-sm fa fa-trash-o' and starts-with(@href, '/ClassDetails/Deactivate?ClassID=')][contains(., 'Deactivate')]")).click();
      
  • Нажмите Активируйте ссылку:

    • CSSSelector

      driver.findElement(By.cssSelector("a.btn.btn-info.btn-sm.fa.fa-check-square-o[href^='/ClassDetails/Activate?ClassID=']")).click();
      
    • * 1045 XPath *:

      driver.findElement(By.xpath("//a[@class='btn btn-info btn-sm  fa fa-check-square-o' and starts-with(@href, '/ClassDetails/Activate?ClassID=')][contains(., 'Activate')]")).click();
      
0 голосов
/ 07 января 2019

Используйте следующие cssSelectors вместо xpaths:

Для активации Btn:

а [HREF * = '/ ClassDetails / Активировать']

Для кнопки деактивации:

а [HREF * = '/ ClassDetails / Деактивировать']

Помните, что вам нужно проверить / обработать, присутствует ли кнопка «Активировать / Деактивировать» или нет, чтобы нажимать на них.

Надеюсь, это помогло.

0 голосов
/ 07 января 2019

Вы можете выполнить java-скрипт click () на отключенной кнопке как:

WebElement deactivatebutton = driver.findElement(By.xpath("//*[@id='tblClassName']/tbody/tr[2]/td[4]/a[2]"));
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", deactivatebutton);
...