如何通过webdriver点击DIV标签内的按钮?

时间:2017-05-03 16:06:56

标签: selenium webdriver

我有这个按钮:



<div class="card-footer text-right">
  <input id="login" type="submit" class="btn btn-sm btn-primary" value="Log In" />
&#13;
&#13;
&#13;

已编写代码将其单击为:

&#13;
&#13;
driver.findElement(By.xpath("//div[contains(@class,'btn btn-sm btn-primary')]")).click();
&#13;
&#13;
&#13;

哪个不起作用。有什么帮助吗?

4 个答案:

答案 0 :(得分:2)

脚本运行时,可能无法显示登录按钮或可单击。尝试添加WebDriver等待。例如:

WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.visibilityOfElementLocated(
                 By.xpath("//div[@class='card-footer text-right']/input[@id='login']"));
driver.findElement(By.xpath("//div[@class='card-footer text-right']/input[@id='login']"))
      .click();

答案 1 :(得分:1)

建议每当HTML DOM中存在元素以获得更好的性能时,我们应首先尝试通过各自的定位器idname访问这些元素。接下来我们应该尝试linkTexttagNamecssxpath

根据代码中的元素,您可以尝试以下选项:

driver.findElement(By.id("login")).click();

OR

driver.findElement(By.xpath("//input[@id='login']")).click();

OR

driver.findElement(By.xpath("//div[@class='card-footer text-right']/input[@id='login']")).click();

现在,当您看到ElementNotVisibleException时,我们将为元素引入一个ExplicitWait,然后尝试点击它,如下所示:

    WebElement myElement = (new WebDriverWait(driver, 15))
              .until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@class='card-footer text-right']/input[@id='login']")));
    myElement.click();

如果这有助于您,请告诉我。

答案 2 :(得分:0)

看来这里的div不会挡路,

driver.findElement(By.xpath("//input[@id='login']")).click();

所以,这是做什么的,它正在整个页面上寻找输入标签,并且它们中的任何祖先可能具有什么并不重要。然后它选择具有'login'作为id属性值的元素。

答案 3 :(得分:0)

请尝试以下操作:

WebElement yourElement = driver.findElement(By.cssSelector("div.card-footer.text-right input#login"));
WebDriverWait wait =  new WebDriverWait(driver,20);

wait.until(ExpectedConditions.visibilityOf(yourElement));
yourElement .click();