猿问

我可以通过 Java 在 Selenium 中使用没有 ExpectedCondition

我有一个项目正在使用 Cucumber/Selenium 进行前端测试。我被告知使用 WebDriverWait 而不是Thread.sleep()完成测试。但是,在这种情况下,我不是在寻找预期的条件。我确实需要在页面加载时暂停测试。如果它在等待之前搜索 xPath,它将单击搜索中的第一项并继续测试错误的内容。



慕盖茨4494581
浏览 182回答 3
3回答

四季花海

为什么需要暂停巡回测试?如果您需要等待 untli 元素可见,请使用:new WebDriverWait(WebDriver driver, String timeToWait).until(ExpectedConditions.visibilityOf(WebElement element));如果您需要等待 untli 元素可点击使用:new WebDriverWait(WebDriver driver, String timeToWait).until(ExpectedConditions.elementToBeClickable(WebElement element));如果您需要等待 untli 元素将出现在 DOM 上,请使用:webDriver.manage().timeouts().implicitlyWait(String timeToWait, TimeUnit.SECONDS);使用 Thread.sleep() 或在指定时间内暂停测试是一种不好的做法。

函数式编程

如果您打算在不使用任何ExpectedConditions的情况下使用WebDriverWait ,而您需要在页面加载时暂停测试,您还可以使用Java表达式,如下所示: lambdanew WebDriverWait(driver, 20)         .until(d -> ((JavascriptExecutor)d).executeScript("return document.readyState")             .equals("complete"));

忽然笑

对 Java + Selenium使用以下方法:public boolean&nbsp; isPageReady(WebDriver driver){&nbsp; &nbsp;boolean readyStateComplete = false;&nbsp; &nbsp; while (!readyStateComplete){&nbsp; &nbsp; &nbsp; &nbsp; JavascriptExecutor executor = (JavascriptExecutor) driver;&nbsp; &nbsp; &nbsp; &nbsp; readyStateComplete = executor.executeScript("return document.readyState").equals("complete");&nbsp; &nbsp; }&nbsp; &nbsp; return&nbsp; readyStateComplete;}对于 C# + 硒:private void WaitUntilDocumentIsReady(TimeSpan timeout){&nbsp; &nbsp; var javaScriptExecutor = WebDriver as IJavaScriptExecutor;&nbsp; &nbsp; var wait = new WebDriverWait(WebDriver, timeout);&nbsp; &nbsp; // Check if document is ready&nbsp; &nbsp; Func<IWebDriver, bool> readyCondition = webDriver => javaScriptExecutor&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .ExecuteScript("return (document.readyState == 'complete' && jQuery.active == 0)");&nbsp; &nbsp; wait.Until(readyCondition);}
随时随地看视频慕课网APP

相关分类

Java
我要回答