当前位置: 首页 > 知识库问答 >
问题:

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

爱亮
2023-03-14

我有一个测试,在詹金斯内部运行时总是失败。

我的项目包括Selenium webdriver、JAVA、Maven、TestNG、Jenkins和Allure(reports)。我有几个包含100个测试用例的测试套件,我通过3种不同的浏览器对它们进行迭代(这些测试使用TestNG并行运行)。它们都运行(使用maven命令行)并传入我的开发笔记本电脑,使用命令行时在测试服务器上运行。

我有两个关于Jenkins的问题,并将它们分成两个问题-其中一个在这个问题中描述,另一个(IE11问题)在这里。

当在测试服务器的Jenkins内部运行时,问题就开始了!在mobile emulator(Chrome浏览器)中测试失败——在测试中,我单击一个链接,以验证是否使用正确的url打开了一个新窗口。我尝试了3种类型的点击(Selenium click、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.NullPointerExcture: null值在条目:句柄=null在com.google.common.collect.CollectPreconditions.checkEntryNotNull(CollectPreconditions.java:34)在com.google.common.collect.SingletonImmutableBiMap.(13/>(远程WebDriver.java:995)il.carambola.pages.Page.closePopupWindow(Page.java:786)

你认为Jenkins不会在浏览器中打开新窗口存在安全问题吗?打开窗户很慢吗?当不使用移动模拟器时,同样的测试也会通过。(我在Chrome和Firefox上进行了相同的测试,它成功点击并通过了验证)。

JDK 1.80_162

詹金斯V 2.121.1

服务器-AWSt2.large-8GB内存,Windows服务器2016数据中心,64位

共有1个答案

公良鸿风
2023-03-14

很明显当你的程序到达这一行

driver.switchTo().window(newWindow);

newWindow仍然为空。这可能是一个时间问题,也可能是另一个导致弹出窗口无法显示的问题。为了确保这不是一个时间问题,我建议在尝试切换窗口之前添加某种等待,等待出现多个窗口句柄。差不多

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

如果等待失败,那么您知道弹出窗口被阻止,可以从那里继续。

 类似资料:
  • 我的Junit测试使用DBUnit,从Eclipse运行时运行良好。但是,使用Maven运行相同的测试会导致以下一项测试失败: 我已经连续几次尝试从EclipseGUI(“作为JUnit测试运行”)运行该测试和整个测试集,但它们从未失败——但从Maven来看,它们确实失败了。 我对每个测试都使用@数据库设置,但这足以真正重置数据库吗?我还认为Maven可能会并行运行测试,所以我尝试在pom.xml

  • 我已经为静态方法编写了一些单元测试。静态方法只接受一个参数。参数的类型是final类。在代码方面: 因此,对于类,我创建了一个测试类,其中我为这个方法编写了测试,。单元测试框架是TestNG,使用的模拟库是。因此,典型测试具有以下结构: 有什么问题? 尽管测试在IntelliJ内部成功地在本地运行,但在Jenkins上失败(当我在远程分支中推送代码时,会触发构建,并在最后运行单元测试)。错误消息如

  • 问题内容: 我已经设置了一个Jenkins服务器来运行Selenium测试。生成脚本是用Ant(CentOS 6.3上的v 1.7.1)编写的,并且测试在Sauce Labs上运行。我通过外壳执行构建: 问题是测试失败时,詹金斯(Jenkins)将其标记为成功。我可以通过将设置为来避免这种情况,请参阅: 但是,这并不理想,因为Jenkins会在遇到第一个故障时终止构建。构建完成后是否可以检查失败,

  • 我正在使用C#Selenium进行自动测试,在最新的chromedriver更新89.0.4389.2300之后,Google chrome立即启动并崩溃。最奇怪的是,当我在本地运行它时,一切正常,但我也在使用Azure管道在服务器上运行测试。服务器给了我: OpenQA。硒。WebDriverException:未知错误:Chrome无法启动:崩溃。(未知错误:DevToolsActivePor

  • 我试图用jenkins execution命令测试我的java项目,但是我得到了以下错误消息: 有关单个测试结果,请参阅/var/jenkins_home/workspace/test1/target/surefire-reports。请参阅转储文件(如果存在)[date].dump,[date]-jvmrun[N].dump和[date].dumpstream。分叉的VM在没有正确地说再见的情况

  • 我按照cypress在他们的文档中推荐的方式编写测试,即每个测试有多个断言,但是用这种方式编写测试时会出现一个问题,那就是如果断言失败,测试执行就会停止。 我希望每个测试有多个断言,如果其中一个失败,测试将失败,但将继续测试执行,所以在最后,我将能够看到测试中失败的所有断言,而不仅仅是第一个失败的断言。 提前感谢!