视觉测试工具箱( 二 )

这样,每当我们第一次与屏幕交互时,我们都可以轻松地从测试中调用验证(顺便说一句,我使用类似的方法来集成Applitools进行视觉测试):
public class GoogleSteps extends BaseSteps {private GooglePage google;@Given("I am on the homepage")public void homepage() {google.verify().someAction().nextAction();}}光学字符识别(OCR)视觉断言的另一种形式是光学字符识别,其首字母缩写为OCR 。每当由于某种原因将文本渲染为图像并且无法使用标准测试工具进行验证时,此功能将非常有用 。
对于那些使用Selenium进行Web抓取而不是进行测试的用户来说,这可能也很有趣,因为这是网站开发人员采取的反措施之一,以使其变得更加困难 。
我们使用Tesseract(一种最初由HP在1980年代开发,目前由Google赞助的OCR工具) 。
我们的示例不是最实际的示例,而是要展示Tesseract在检测不同类型的字体方面的强大功能:我们将验证Google徽标是否确实拼写出“ Google”:
public class GooglePage extends BasePage<GooglePage> {@Autowired private OCR ocr;...public String getLogoText() {return ocr.getText($("LOGO"));}}public class GoogleSteps extends BaseSteps {private GooglePage google;...@Then("the Google logo shows the correct text")public void checkLogo() {assertThat(google.getLogoText()).isEqualTo("Google");}}使用的OCR服务如下所示:
public class OCR implements qa.justtestlah.stubs.OCR {private Logger LOG = LoggerFactory.getLogger(OCR.class);private TakesScreenshot driver;private Tesseract ocr;@Autowiredpublic OCR(Tesseract ocr) {this.ocr = ocr;}/*** @param element {@link WebElement} element to perform OCR on* @return recognised text of the element*/public String getText(WebElement element) {return getText(element.getScreenshotAs(OutputType.FILE));}/** @return all text recognised on the screen */public String getText() {return getText(getScreenshot());}private String getText(File file) {LOG.info("Peforming OCR on file {}", file);try {return ocr.doOCR(file).trim();} catch (TesseractException exception) {LOG.warn("Error performing OCR", exception);return null;}}/*** Usage:** <pre>* new OCR().withDriver(driver);* </pre>** @param driver {@link WebDriver} to use for capturing screenshots* @return this*/public OCR withDriver(WebDriver driver) {this.driver = (TakesScreenshot) driver;return this;}/*** Usage:** <pre>* new OCR().withDriver(driver);* </pre>** @param driver {@link TakesScreenshot} to use for capturing screenshots* @return this*/public OCR withDriver(TakesScreenshot driver) {this.driver = driver;return this;}private File getScreenshot() {return driver.getScreenshotAs(OutputType.FILE);}@Overridepublic void setDriver(WebDriver driver) {this.driver = (TakesScreenshot) driver;}}这要求在运行测试的实例上安装Tesseract 。有关完整的源代码和演示,请查看JustTestLah!测试框架 。

  • http://www.justtestlah.qa/

【视觉测试工具箱】


推荐阅读