java - 使用 WebDriverWait 的 NoSuchElementException
问题描述
我真的很想了解为什么在以与以前失败完全相同的方式接近定位元素时。
NoSuchElementException :Caused by: org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {"method":"xpath","selector":"//span[contains(text(),'Add')]"}
我也尝试过使用类似以下的东西,但它也失败了,所以为了让我编写一个好的自动化代码,我需要直接了解我的知识WebDriverWait
,所以我很感激有知识的人花一些时间在这个调查上。
xpath
如果我有这样的情况,它会定位:
//body/div[@id='root']/div[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[2]/div[1]/div[2]/div[1]/div[2]/div[1]
public void clickOnAddVehicleButton() {
wait.until(ExpectedConditions.visibilityOf(addVehicleButton));
vehicles.addVehicleButton.click();
}
我不是 Java 新手,但我是自动化新手,因此缺少一些知识领域,我哈
基类:
public class BasePage {
protected final WebDriver driver;
protected final WebDriverWait wait;
public BasePage(WebDriver driver) {
this.driver = driver;
this.wait = new WebDriverWait(driver,5);
PageFactory.initElements(new AjaxElementLocatorFactory(driver, 10), this);
}
}
该按钮应该存在的组件:
public class Vehicles extends BasePage {
private static Vehicles vehicles;
private Vehicles(WebDriver driver) {
super(driver);
}
@FindBy(xpath = "//span[text(),'Add']")
public WebElement addVehicleButton;
public static Vehicles vehiclesInstance(WebDriver driver) {
return vehicles == null ? vehicles = new Vehicles(driver) : vehicles;
}
public void clickOnAddVehicleButton() {
vehicles.addVehicleButton.click();
}
服务类中的功能:
public void addVehicle(String vehicleName, String numberPlate) {
myAccountService.myAccountPage()
.clickOnVehiclesTab();
vehicles.fillInVehicleName(vehicleName)
.fillInVehicleNumberPlate(numberPlate)
.clickOnAddVehicleButton();
}
用于测试的 WebDriverSettings :
public class WebDriverSettings {
protected WebDriver driver;
@Before
public void setUp() {
WebDriverManager.chromedriver().setup();
driver = new ChromeDriver();
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
loginToDevEnvironment();
}
最后是我调用服务方法的测试类:
public class VehicleServiceTest extends WebDriverSettings {
private VehiclesService vehiclesService;
@Before
public void setUp(){
super.setUp();
CookieService.cookieServiceInstance(driver).acceptCookies();
HomePageService.homePageServiceInstance(driver).clickOnMyAccountTab();
LoginService.loginServiceInstance(driver).login(loginCorrectData());
HomePageService.homePageServiceInstance(driver).clickOnMyAccount();
vehiclesService = VehiclesService.vehiclesServiceInstance(driver);
}
@Test
public void shouldAddVehicle(){
vehiclesService.addVehicle("test-vehicle","test-test");
Assert.assertEquals(1,vehiclesService.getVehicles().listOfAddedVehicles().size());
}
解决方案
推荐阅读
- firebase - Flutter - 如何从firebase实时数据库中检索最后一项?
- c++ - 如何在声明时静态检查我的模板类?
- php - 在 PHP 中创建暗版网站的最佳方法
- winforms - 修改后的 GDI 弧
- python - 如何从子列表中的行创建字典?
- python - 将列中的 nan 替换为两个值 python 之间的平均值
- javascript - 如何使用 moment.JS 检查 SQL 获取的 dateTime 对象的时间戳是否比另一个更旧?
- html - 在 CakePHP 中将“i”标签嵌入到“a”标签中
- drag-and-drop - Vuetify TreeView + 拖放
- javascript - 尝试在移动视图中隐藏导航栏