如何通过Selenium和Java单击“停用”按钮,然后单击“激活”按钮

时间:2019-01-07 05:48:23

标签: java selenium-webdriver xpath css-selectors webdriver

相同的按钮用于激活和停用。第一次单击代码运行按钮并成功“停用”。但是第二次代码无法找到该元素。第一种情况下的按钮位于第二个“ 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 :(得分:2)

您可以在此处使用两种方法:

  1. 您可以使用两个xpath,每个xpath分别使用它们的文本来表示“激活”和“停用”按钮:

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

  2. 通过设置click方法并向其发送按钮文本来对其进行参数化,这将更加有用,因为您可以将该方法用于网页上存在的任何按钮(具有相同的xpath类型) 。

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

然后调用类似clickElement("Activate");clickElement("Deactivate");的方法

答案 1 :(得分:1)

我的解决方案是根据可用的属性构造简单的Locator Strategies

  • 点击停用链接:

    • cssSelector

      driver.findElement(By.cssSelector("a.btn.btn-danger.btn-sm.fa.fa-trash-o[href^='/ClassDetails/Deactivate?ClassID=']")).click();
      
    • 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();
      
    • 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();
      

答案 2 :(得分:0)

您可以按以下方式在禁用按钮上执行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);

答案 3 :(得分:0)

使用以下cssSelectors代替xpath:

对于激活Btn:

  

a [href * ='/ ClassDetails / Activate']

对于停用按钮:

  

a [href * ='/ ClassDetails / Deactivate']

请记住,您需要检查/处理是否存在“激活/停用”按钮才能单击它们。

希望这会有所帮助。

答案 4 :(得分:0)

由于它是一个链接,因此也可以使用linktext定位器

// to activate
driver.findElement(By.linkText("Activate")).click();
//to deactivate
driver.findElement(By.linkText("Deactivate")).click();

答案 5 :(得分:0)

未清除我的问题。请检查附件。Going to click Deactivate button

After deactivated,again second run of code, going to click data activation. In this case one one button

我曾经写下面的代码,这很好。但是我知道那不是有效的。我需要在两个不同的运行中停用和激活相同的按钮。

尝试{

        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();