移动模拟器Selenium测试在Jenkins中失败,但在cmd中未失败

时间:2018-07-30 11:57:01

标签: java jenkins selenium-webdriver testng selenium-chromedriver

我的测试在Jenkins中运行时总是失败。

我的项目包括Selenium Webdriver,JAVA,Maven,TestNG,Jenkins,Allure(报告)。 我有几套包含100多个测试用例的测试,并通过3种不同的浏览器进行了迭代(测试使用TestNG并行运行)。它们全部运行(使用maven命令行)并在使用命令行时传入我的开发笔记本电脑以及测试服务器上。

关于詹金斯,我有2个问题,并将它们分为2个问题-其中一个在此问题中进行了描述,另一个(IE11问题)在此处。

问题在测试服务器的Jenkins中运行时开始! 在移动模拟器(Chrome浏览器)中,测试失败-在测试中,我单击链接以验证是否使用正确的URL打开了新窗口。 我尝试了3种类型的点击(Selenium点击,Actions和JS),所有这些都返回了空句柄。

代码:

在这里创建主窗口句柄,然后单击链接:

String mwh = driver.getWindowHandle();
WebElement poweredBy = (new WebDriverWait(driver,10).until(ExpectedConditions.visibilityOfElementLocated(By.xpath(Consts.POWERED_BY_XPATH_1000))));
poweredBy.click();

这是获取句柄并验证新窗口的方法的一部分:

public boolean closePopupWindow(String mwh, String mTitle, String layoutNumber) {
// For IE11- make sure popup blocker is turned off in the options. else it will have only one window handle and fail
boolean isOpenedWindowCorrect = false; 
String newWindow = null;
Set<String> handlers = driver.getWindowHandles();

for (String window : handlers) {
  if (!window.equals(mwh)) {
    newWindow = window;
  }
}
// the focus is on the main page. need to switchTo new page and close it
driver.switchTo().window(newWindow);
System.out.println("The focus now is on the NEW window");
String newTitle = driver.getTitle();
System.out.println(newTitle);

这是我得到的错误:

  

java.lang.NullPointerException:输入项中的空值:handle = null       在com.google.common.collect.CollectPreconditions.checkEntryNotNull(CollectPreconditions.java:34)       在com.google.common.collect.SingletonImmutableBiMap。(SingletonImmutableBiMap.java:42)       在com.google.common.collect.ImmutableBiMap.of(ImmutableBiMap.java:73)       在com.google.common.collect.ImmutableMap.of(ImmutableMap.java:123)       在org.openqa.selenium.remote.RemoteWebDriver $ RemoteTargetLocator.window(RemoteWebDriver.java:995)       在il.carambola.pages.Page.closePopupWindow(Page.java:786)

您是否认为存在詹金斯不会在浏览器中打开新窗口的安全问题?打开窗户很慢吗? 不使用移动仿真器时,同样会测试PASS。 (我在Chrome和Firefox中进行了相同的测试,并且点击并通过了验证,此测试成功。)

JDK 1.8.0_162

Jenkins V 2.121.1

服务器-AWS t2.large-8GB RAM,Windows Server 2016数据中心,64位

1 个答案:

答案 0 :(得分:0)

很明显,当您的程序进入这一行

driver.switchTo().window(newWindow);

newWindow仍然为空。编写方式可能是计时问题,也可能是导致弹出窗口不显示的另一个问题。为了确保这不是时间问题,建议您在尝试切换窗口之前添加某种等待,以等待多个窗口句柄。像

(new WebDriverWait(driver,10)).until(d -> d.getWindowHandles().size() == 2);

如果等待失败,则表明弹出窗口已被阻止,可以从那里去。