Java org.openqa.selenium.TimeoutException:预期条件失败:正在等待by.xpath定位的元素的可见性:
我正在尝试使用选项Java org.openqa.selenium.TimeoutException:预期条件失败:正在等待by.xpath定位的元素的可见性:,java,selenium-webdriver,xpath,css-selectors,webdriverwait,Java,Selenium Webdriver,Xpath,Css Selectors,Webdriverwait,我正在尝试使用选项sendkeys()发送文本。这是我的类页面对象中的方法案例: public void setEntityName() { internalWait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id=\"entity_name\"]"))); entityName.clear(); entityName.sendKeys("TEST"); } HTML: 所需的
sendkeys()
发送文本。这是我的类页面对象中的方法案例:
public void setEntityName() {
internalWait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id=\"entity_name\"]")));
entityName.clear();
entityName.sendKeys("TEST");
}
HTML:
所需的元素是一个元素,因此要调用sendKeys()
而不是元素的可见性()
,您必须将元素的WebDriverWait诱导为可禁用()
,并且您可以使用以下任一解决方案:
- 使用
:css选择器
public void setEntityName() { WebElement entityName = new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("input.ng-pristine.ng-invalid.ng-invalid-required.ng-valid-maxlength.ng-touched#entity_name[ng-model='entityData.name']"))); entityName.clear(); entityName.sendKeys("TEST"); }
- 使用
:xpath
public void setEntityName() { WebElement entityName = new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//input[@class='ng-pristine ng-invalid ng-invalid-required ng-valid-maxlength ng-touched' and @id='entity_name'][@ng-model='entityData.name']"))); entityName.clear(); entityName.sendKeys("TEST"); }
By.id()
。它比.xpath()提供的支持更好,速度更快。如果我看到了错误,但我想知道他们是否有任何建议,我已经使用了By id,当我进行手动测试时,我可以在输入中写入,我也可以单击它,但它不允许我使用sendKeys元素不可见。是否正在等待元素可单击而不是可见?Angular?MateMrše拇指规则,如果下一步是调用click()
或sendKeys()
跨浏览器的唯一预期条件是元素可折叠
,因为可见性
不能保证clickability@DebanjanB,非常感谢,正如他告诉我的。谢谢!!