Selenium Java未知时间加载浏览器

时间:2018-05-14 19:31:33

标签: java selenium selenium-webdriver webdriver webdriverwait

我是selenium Java的新手,有人可以帮忙并给我一个简单的例子来说明如何创建一个wait.until java命令吗?如果错误,请更正我的代码

import org.openqa.selenium.support.ui.WebDriverWait;
//lines of code
WebDriverWait waitVar = new WebDriverWait (driver, 1000);
waitVar.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id=\"btnDraftReports\"]"))).click();

或者我应该使用它吗?

waitVar.until(ExpectedConditions.elementToBeClickable(By.id("btnDraftReports"))).click();

谢谢你,更多力量

4 个答案:

答案 0 :(得分:0)

语法上两个表达式都是正确且有效的 Selenium的定位器策略 其中:

  • By.xpath("//*[@id=\"btnDraftReports\"]"):此表达式使用 xpath 引擎。
  • By.id("btnDraftReports"):此表达式使用 id 属性。

但是,一旦等待 ExpectedConditions 在调用click()时返回元素,那么您应该使用elementToBeClickable()方法而不是visibilityOfElementLocated()方法如下:

new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//*[@id=\"btnDraftReports\"]"))).click();
//or
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.id("btnDraftReports"))).click();

琐事

现在,值得商榷的问题是使用哪个定位器idxpath

由于 Selenium 实际上 id 属性仍被视为最有效的定位策略

您将在讨论Official locator strategies for the webdriver

中获得更多见解

答案 1 :(得分:0)

visibilityOfElementLocated elementToBeClickable 行为明显不同。

何时使用:所有预期条件取决于方案。

visibilityOfElementLocated :当您想要等到网页上显示网页元素的可见性时,您可能想要使用此预期条件。它更多地是关于网络元素的可见性。

示例:

  1. 登录任何网站后,您应该通过使用visibilityOfElementLocated条件让您的脚本知道该登录已成功完成。您可能会考虑您的个人资料照片或登录后出现的任何链接。
  2. elementToBeClickable :当您想等到网页元素变为可点击时。它更多的是关于web元素的点击能力。

    示例:

    1. 创建帐户时,您必须在许多网站上看到协议复选框。方案是,在检查读取协议复选框之前,您无法单击注册按钮。在这里,您必须使用elementToBeClickable条件。
    2. 请考虑我认为您正确编写的代码。

      希望这有助于您了解上述条件之间的基本区别。

答案 2 :(得分:0)

尝试以下代码

/* This method is used for wait until element found */
public void expliciteWait(WebElement element, int timeToWaitInSec, WebDriver driver) {
    WebDriverWait wait = new WebDriverWait(driver, timeToWaitInSec);
    wait.until(ExpectedConditions.visibilityOf(element));

答案 3 :(得分:0)

WebElement XYZ= driver.findElement(By.xpath("xpath")); WebDriverWait wait = new WebDriverWait(driver, 10); wait.until(ExpectedConditions.elementToBeClickable(XYZ)); XYZ.click; 为了获得更好的答案,您需要显示HTML