selenium - isDisplayed 未定位元素
问题描述
根据我的理解,当引用 Web 元素时,初始化是通过 PageFactory.init 完成的,它会在您引用它时寻找一个元素,但在我的情况下,isDisplayed 会抛出 NoSuchElementException。
我只想检查一个元素是否显示,如果是,做一件事,如果没有做另一件事,我最终会做意大利面条代码:
public CarParkBook addVehicleIfNotExist(Vehicle vehicle) {
try {
if (!carParkBook.vehicleInput.isDisplayed())
carParkBook.vehicleInput.clear();
carParkBook.vehicleInput.sendKeys(vehicle.getVehiclePlateNumber());
carParkBook.addVehicleButton.click();
return carParkBook;
} catch (NoSuchElementException ex) {
clickOnConfirmVehicleButton();
}
return carParkBook;
}
public class CarParkBook extends BasePage {
private static CarParkBook carParkBook;
@FindBy(xpath = "//input[@id='numberplate']")
public WebElement vehicleInput;
public static CarParkBook carParkBookInstance(WebDriver driver) {
return carParkBook == null ? carParkBook = new CarParkBook(driver) : carParkBook;
}
public CarParkBook(WebDriver driver) {
super(driver);
}
public class BasePage {
protected final WebDriver driver;
public BasePage(WebDriver driver) {
this.driver = driver;
PageFactory.initElements(new AjaxElementLocatorFactory(driver, 5), this);
}
解决方案
在这种情况下,不使用页面工厂会容易得多,您可以做一件简单的事情来检查天气元素是否显示。
if( driver.findelements(By.xpath("whatever")).size>0) // if true your element is displayed.
但是,如果您使用页面工厂尝试使用以下代码,我没有尝试,但它应该可以工作
@FindBys(@FindBy(xpath=”whatever”)))
public List<WebElement> desiredElement;
然后使用与上面相同的逻辑,只需检查
desiredElement.size()>0
让我知道这是否有帮助。
推荐阅读
- android - 如何修复某些 android 设备(Twilio 可编程视频)中的低远程音频?
- python - “ImportError:C 扩展:没有名为转换的模块未构建。” 同时将外部依赖项传递给 PySparkShell。如何通过外部依赖?
- python - 在 Pandas 中使用 GROUP BY 执行 COUNTIF - Python 3.x
- php - 如何在php中显示计算的历史记录
- xamarin.ios - 无法使用托管的 mac 代理 Azure 管道构建 iOS 项目的发布版本
- browser - 无法访问此站点 localhost 拒绝连接。使用 jboss 7.1 部署
- python - 在 Windows 中捕获 subprocess.run() 的输出
- android - 如何避免flutter中的内存不足?
- javascript - 如果我想为数组的单个索引提供多个元素,如何在 javascript 中填充数组
- python - 使用 ahk 库将击键发送到记事本