申艳超-博客

搜索引擎、分布式、高性能、NLP、ElasticSearch、Solr

0%

Maven强大的一个重要的原因是它有一个十分完善的生命周期模型(lifecycle),这个生命周期可以从两方面来理解,第一,顾名思义,运行Maven的每个步骤都由它来定义的,这种预定义的默认行为使得我们使用Maven变得简单,相比而言,Ant的每个步骤都要你手工去定义。第二,这个模型是一种标准,在不同的项目中,使用Maven的接口是一样的,这样就不用去仔细理解每个项目的构建了,一般情况下,mvn clean install 这样的命令是通用的。我想,一定是吸收了许多项目的经验,Maven才能定义出如此完善的模型。

Read more »

什么是Page Objects(翻译为:页面对象?)

简单的说,Page Objects是指UI界面上用于与用户进行交互的对象。它可以指整个页面,也可以指Page上的某个区域。Page Objects是你的test code的交互对象,是对实际UI的一种抽象模型化。通过Page Objects可以减少重复代码的编写,例如,很多页面都有同样的header,footer,navigator等部分,如果对这些进行抽象,只写一次就可以在其他地方通用了。

注意PageObjects与Page Objects是不一样的,PageObjects用于特指采用Page Objects进行封装的一种设计模式(Design Pattern),而不仅仅是多一个空格的区别。哈。

如何实现PageObjects设计模式?

一般情况下,对于一个Page Objects对象,它有两个方面的特征:

Selenium WebDriver支持哪儿些浏览器?

按照官方文档的说法,现阶段有以下的drivers:

  • ChromeDriver
  • InternetExplorerDriver
  • FirefoxDriver
  • OperaDriver
  • HtmlUnitDriver
  • AndroidDriver(mobile testing)
  • OperaMobileDriver(mobile testing)
  • IPhoneDriver(mobile testing)
Read more »

经常会碰到,页面操作后,出现一个alert窗口或者prompt确认窗口的情况,这时需要获得窗口的提示信息以及点击确定或取消的情况。

1
2
3
4
5
6
// Get a handle to the open alert, prompt or confirmation
Alert alert = driver.switchTo().alert();
// Get the text of the alert or prompt
alert.getText();
// And acknowledge the alert (equivalent to clicking "OK")
alert.accept();

这是通用的处理方法。但是如果弹出的窗口不是alert()或者prompt()弹出来的则不适用。请注意。

selenium自动化开发中,难免需要用到直接调用javascript,怎么用呢?

1
2
3
WebDriver driver; // Assigned elsewhere
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("return document.title");

直接将driver强制转化为JavascriptExecutor,然后执行javascript即可。

Apache httpd sever

什么是MPM?

MPM(Multi -Processing Modules,多路处理模块)是Apache2.x中影响性能的最核心特性。

是Apache 2.x才支持的一个可插入的并发模型,在编译的时候,我们只可以选择一个并发模型。

配置文件:/usr/local/apache2/conf/extra/httpd-mpm.conf

如果apache是默认安装的可能配置在httpd.conf文件中。根据实际情况查找配置。

使用格式:
进入apache的目录,对apache进行如下编译:

1
./configure --help|grep mpm
Read more »

很多页面元素都是ajax动态生成的,这就要求进行适当的等待

如何进行等待呢?

1.直接sleep

1
2
3
4
5
6
7
public static void sleep(int seconds) {
try {
TimeUnit.SECONDS.sleep(seconds);
} catch (InterruptedException e) {
e.printStackTrace();
}
}

这种方法,用于直接的让thread进行等待指定的seconds。

Read more »

在写selenium自动化的过程中,经常会遇到这样的问题:

1.在同一个页面内做操作,比如点击某个按钮后,弹出一个框,再点击另外一个按钮,又弹出一个框
2.此时如果第一个click操作后,第二个click再点击时,由于前一个弹出的框仍旧在前端显示,就会出错
3.在实际人工操作中,点击出第一个框后,点击一下空白区域,在点击出现第二个框。因此,可以考虑一个点击空白区域的方法

实现方法如下

1
2
3
4
5
6
7
 /**
* 点击空白区域:坐标(0,0)
*/
public static void clickBlankArea(WebDriver driver) {
Actions actions = new Actions(driver);
actions.moveByOffset(0, 0).click().build().perform();
}

让driver先移动到一个空白位置(此处设为(0,0)坐标点),做一下点击操作即可

一 maven插件:maven-pmd-plugin

pom.xml添加如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<version>2.7.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
<configuration>
<failurePriority>2</failurePriority>
<targetJdk>1.6</targetJdk>
<rulesets>
<ruleset>/pmd-rulesets.xml</ruleset>
</rulesets>
</configuration>
</plugin>

failurePriority用于指定在什么错误级别会failure,级别0~5不等。0为最高,5为最低。此处设为2,意为0、1、2级别的错误都会导致报错。级别可以根据项目的要求进行配置

Read more »