相同的按钮用于激活和停用。第一次单击代码运行按钮并成功“停用”。但是第二次代码无法找到该元素。第一种情况下的按钮位于第二个“ 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"));
答案 0 :(得分:2)
您可以在此处使用两种方法:
您可以使用两个xpath,每个xpath分别使用它们的文本来表示“激活”和“停用”按钮:
WebElement activateButton = driver.findElement(By.xpath("//a[text()='Activate']"));
WebElement deactivateButton = driver.findElement(By.xpath("//a[text()='Deactivate']"));
通过设置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
我曾经写下面的代码,这很好。但是我知道那不是有效的。我需要在两个不同的运行中停用和激活相同的按钮。
尝试{
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();