我正在使用硒和铬驱动器,我无法点击按钮, 我尝试了不同的方法,但没有:
link = driver.findElement(By.xpath("//button[@class='btn buttonContainer arrow']"));
link = driver.findElement(By.xpath("//input[@class='btn buttonContainer arrow']"));
link = driver.findElement(By.cssSelector("input[type='button']"));
link = driver.findElement(By.cssSelector("input[type='button'][value='btn buttonContainer arrow']"));
错误按摩:
INFO: Detected dialect: OSS
Exception in thread "main" org.openqa.selenium.ElementNotVisibleException: element not visible
(Session info: chrome=58.0.3029.96)
(Driver info: chromedriver=2.29.461591 (62ebf098771772160f391d75e589dc567915b233),platform=Windows NT 10.0.10240 x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 15 milliseconds
代码:
<a class="ng-scope" ng-if="!loginCtrl.pageObject.isDebugMode" ng-click="rootCtrl.redirectToRegistration()">
<button class="btn buttonContainer arrow">
<span>Enter</span>
</button>
</a>
感谢Amir
答案 0 :(得分:0)
如果您想点击Enter
按钮,请尝试:driver.findElement(By.xpath("//button[@class='btn buttonContainer arrow']/span"));
答案 1 :(得分:0)
我没有复制它,但你应该能够让它像这样工作:
firefoxDriver.findElement(By.className("buttonContainer")).click();
这种方法适用于我使用Selenium V2.52.0
答案 2 :(得分:0)
在脚本中使用一些implicit wait
默认值,在抛出异常之前通过selenium定位元素
像
driver.get("your _site_url");
driver.manage().timeouts().implicitlyWait(45, TimeUnit.SECONDS);
使用显式等待,直到您的元素可见,然后执行单击
WebDriverWait wait = new WebDriverWait(driver, 60);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//button[@class='btn buttonContainer arrow']")));
driver.findElement(By.xpath("//button[@class='btn buttonContainer arrow']")).click();
答案 3 :(得分:0)
您正在使用AngularJS自动构建基于Web的应用程序。
在这种情况下,您的click()
事件应定位到具有ng-click
属性的网络元素。
尝试点击锚点链接而不是按钮。
link = driver.findElement(By.xpath("//button[@class='btn buttonContainer arrow']/..")); link.click();
答案 4 :(得分:0)
看起来DOM中有多个具有相同xpath的Web元素,并且第一个元素不可见,尽管Firebug会突出显示可见元素(通常在响应式网站上发生)
您可以尝试以下操作:
public WebElement getDisplayedElement( WebDriver driver ) {
try {
WebElement visibleElement = null;
List<WebElement> elements = driver.findElements(locator);
for (WebElement element : elements) {
boolean isDisplayed = false;
boolean isEnabled = false;
System.out.println("Count of element(s) from locator " +locator+ " is " +elements.size());
isDisplayed = element.isDisplayed();
isEnabled = element.isEnabled();
if(isDisplayed && isEnabled ) {
System.out.println("Found enabled and displayed web element");
visibleElement = element;
break;
}
}
return visibleElement;
}