【问题标题】:How to click on the Deactivate button and then on Activate button through Selenium and Java如何通过 Selenium 和 Java 单击停用按钮,然后单击激活按钮
【发布时间】:2019-06-01 19:20:13
【问题描述】:

相同的按钮用于激活和停用。第一次点击代码运行按钮并成功“停用”。但第二次代码无法找到元素。第一个案例按钮位于第二个“a”标签中,然后停用它位于第一个“a”标签中的按钮。

案例一:

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

【问题讨论】:

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


    【解决方案1】:

    您可以在这里使用两种方法:

    1. 您可以使用两个 xpath,一个用于激活和停用按钮,使用如下文本:

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

    2. 通过单击方法并将按钮的文本发送给它来使其参数化,这将更有用,因为您可以将此方法用于网页上存在的任何按钮(具有相同类型的 xpath)。

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

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

    【讨论】:

      【解决方案2】:

      没有解决我的问题。请查看附件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();
      

      【讨论】:

        【解决方案3】:

        既然是链接,也可以使用linktext定位器

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

        【讨论】:

          【解决方案4】:

          我的解决方案是根据可用的属性构造简单的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();
              

          【讨论】:

            【解决方案5】:

            使用以下 cssSelectors 代替 xpath:

            激活按钮:

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

            对于停用按钮:

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

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

            希望这会有所帮助。

            【讨论】:

              【解决方案6】:

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

              【讨论】:

              • 恭喜,您刚刚修改了测试以始终通过,即使按钮永远无法启用并且最​​终用户将永远无法以预期的方式使用网页。我希望人们在 10 次中有 9 次不合适时停止使用 JavascriptExecutor 来解决每一个问题
              猜你喜欢
              • 2011-05-01
              • 2013-05-07
              • 1970-01-01
              • 1970-01-01
              • 2021-03-29
              • 2020-07-28
              • 1970-01-01
              • 1970-01-01
              • 2011-09-17
              相关资源
              最近更新 更多