【问题标题】:Waiting for visibility of element located by By.xpath等待 By.xpath 定位的元素的可见性
【发布时间】:2021-01-03 01:50:55
【问题描述】:

您能否看看告诉我为什么我无法找到在我切换按钮后出现的某些类。

  1. 点击切换按钮,应该启用注册按钮。
  2. 然后尝试找到与该按钮关联的类并单击它,它说找不到它。

chromeDriver.findElement(By.xpath("//input[@name='email']")).sendKeys("test@test.com");
chromeDriver.findElement(By.xpath("//input[@name='password']")).sendKeys("test");
chromeDriver.findElement(By.xpath("//div[@class='button button-primary button-disabled']"));
chromeDriver.findElements(By.xpath("//div[@class='sign-up-row']")).get(1).click();
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@class='button button-primary']")));

wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//div[@class='button button-primary']"))).click();

或者它确实找到了类但元素不可交互

 chromeDriver.findElement(By.xpath("//div[@class='button button-primary']")); 

  

【问题讨论】:

  • 错误信息是什么?你想用 button-primary 做什么?

标签: java selenium xpath css-selectors webdriverwait


【解决方案1】:

您可以尝试等待进度动画不可见,然后找到您的元素或直接等待注册元素

wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[contains(text(), 'Sign up')]"))).click();

或使用轮询

WebDriverWait wait = new WebDriverWait(driver, 15);
wait.pollingEvery(1, TimeUnit.SECONDS);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[contains(text(), 'Sign up')]"))).click();

【讨论】:

    【解决方案2】:

    您可以使用下面的定位器。

    wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@class='button-hover-wrapper']//div[contains(text(), 'Sign up')]"))).click();
    

    wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@class='button button-primary']//div[contains(text(), 'Sign up')]"))).click();
    

    【讨论】:

    • 非常感谢你,你能告诉我为什么以前我在等待元素时它没有工作
    • 发生这种情况是因为您尝试单击 //div[@class='button button-primary'] 元素并且我收到了点击,但包含 sign up 的子 div 没有收到进一步移动的点击。如果已回答,请将问题标记为已回答。
    【解决方案3】:

    注册上的click(),而不是visibilityOfElementLocated(),您需要为WebDriverWait诱导elementToBeClickable(),您可以使用以下Locator Strategies之一:

    • cssSelector:

      new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("div.sign-up-row +p +div > div.button-inner"))).click();
      
    • xpath:

      new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//div[@class='button button-primary']//div[@class='button-inner' and text()='Sign up']"))).click();
      

    参考文献

    您可以在以下位置找到一些相关讨论:

    【讨论】:

      猜你喜欢
      • 2019-08-03
      • 1970-01-01
      • 2018-09-18
      • 1970-01-01
      • 2013-05-24
      • 2020-05-20
      • 1970-01-01
      • 2023-04-01
      • 2016-05-09
      相关资源
      最近更新 更多