我有这个按钮:
<div class="card-footer text-right">
<input id="login" type="submit" class="btn btn-sm btn-primary" value="Log In" />
&#13;
已编写代码将其单击为:
driver.findElement(By.xpath("//div[contains(@class,'btn btn-sm btn-primary')]")).click();
&#13;
哪个不起作用。有什么帮助吗?
答案 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中存在元素以获得更好的性能时,我们应首先尝试通过各自的定位器id
或name
访问这些元素。接下来我们应该尝试linkText
,tagName
,css
和xpath
根据代码中的元素,您可以尝试以下选项:
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();