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

驾驶员findElement(By.linkText(“”)在一个测试中工作,但在另一个测试中引发异常

宋俊民
2023-03-14

我试图在同一个类中编写两个testng测试(使用Selenium webdriver)——一个登录应用程序,另一个创建一个新帐户。

这些是我遵循的步骤-使用@BeforeClass在Firefox浏览器上打开应用程序

@BeforeClass
public void setUp() throws Exception {
    driver = new FirefoxDriver();
    baseUrl = "http://www.salesforce.com";
    driver.get(baseUrl + "/");
}

>

  • 登录网站的第一个测试

    @Test
    public void testLogin() throws Exception {
    driver.findElement(By.id("username")).sendKeys(strUsername);
    driver.findElement(By.id("password")).sendKeys(strPassword);
    driver.findElement(By.id("Login")).click();
    

    }

    创建新帐户的第二个测试

    @Test
    public void createAccount() throws Exception {
    driver.findElement(By.linkText("Accounts")).click();
    ************************
            ************************
            ************************
            ************************
            ************************
    

    }

    我的问题是,当我运行这个testng测试时,我在第二个测试中遇到异常:org。openqa。硒。NoTouchElementException:无法定位元素:{“方法”:“链接文本”,“选择器”:“帐户”}

    但是如果我在testLogin()测试中包含命令"driver.findElement(By.linkText("帐户")). click();",它就可以工作了。我想在同一个浏览器会话中运行我的所有测试。

    任何意见都将不胜感激。谢谢

  • 共有3个答案

    陈寒
    2023-03-14

    我猜你的第二个测试方法是先执行的。它需要执行第1个方法(用于登录)才能获得“Accounts”链接。您需要在第二个方法中使用dependsOnMethod,以便testLogin将执行第一个方法,然后执行createAccountMethod。在@BeforeClass中,setUp()方法似乎可以。所以,保持setUp()方法不变。将其他两种方法声明为:

    @Test
    public void testLogin() throws Exception {
    //your code here
    }
    @Test(dependsOnMethods{"testLogin"})
    public void testCreateAccount() throws Exception {
    //your code here
    }
    

    在上面的代码中,testLogin()将先执行testCreateAccount()方法,然后执行testCreateAccount()方法,这样您所需的单击链接就不会丢失

    子车轶
    2023-03-14

    @BeforeClass将为每个单独的测试运行安装方法,因此对于测试1,将创建一个新的Firefox浏览器并登录。对于第二个测试,将创建另一个新的Firefox浏览器,它将尝试查找Accounts链接——我假设只有在您登录时才会显示该链接,但是此时第二个浏览器将不会登录。

    你确定你是在@BeforeClass之后吗?

    谷梁英毅
    2023-03-14

    @课前一节课只跑一次。因此,如果您将两个测试保持在同一个类中,那么执行顺序是@beforeClass,第一个测试用例,然后是第二个测试用例(当您到达这个测试时,您的帐户链接应该是可见的)。

    测试的顺序没有保证。因此,如果帐户链接仅在您登录后才可见,那么您的案例可能不会一直通过。因此,问题可能是

    1. 在达到createAccount()测试或

    如果您希望测试用例以特定的顺序执行,那么使用dependsOnMethods并使createAccount依赖于testLogin方法。(参考Testng相关方法)

     类似资料:
    • @ptrthomas-我能够在空手道中分别进行API测试和性能测试。但当我试图在同一个框架中合并两者时,它们中的任何一个都停止了工作。 我可以在这里看到的原因空手道核心是空手道朱尼特和空手道阿帕奇的子依赖性。但是他们都安装了不同版本的空手道核心。因此,要么必须排除其中一个。但是无论你把它排除在哪里,它都会停止工作。如果您从空手道-Junit4中排除它,那么API测试将不起作用,如果您从空手道-ap

    • 1.Linux相关没答上来:     sed只替换第一个     free(查看内存,不是磁盘)     shell脚本 if 和 for 2.python:     装饰器,解释器,迭代器     协程    (六个数据结构死活想不起来集合*2) 3.二分法逼近根号2 4.自动驾驶:相关模型评测方法,评价指标 #社招##商汤科技##智能驾驶##Python##Linux#

    • 博世自动驾驶测试一技术面(9月9号):一个Hr,三个技术人员一个是问Git,linux,python;一个问python项目和基础,一个问c++,面了一个小时16分钟。 先来个英文自我,然后就是英文提问,英文提问昨天打电话时没说有英文提问,但是今天添加了,很紧张答的稀烂: 英文问题:我对第一份工作的期望,以及如何定义第一份工作(问了四五个,就记住这一个), 中文: HR:先介绍了一下我的实习经历和

    • 7.17 一面 1 先写个算法,无重复的最长字串 写完讲解思路 2 自我介绍 3 数据库事务 4 索引 底层结构 5 linux常用命令 统计行数(应该是wc 没答上来 6 进程线程区别 7 二叉树求最大深度,口述 8 算法找出重复数组元素 9 反问 2h后通知二面 7.18 二面 1 讲一下你的实习 2 深挖项目 做了哪些事 3 现场对登录框进行功能测试 4 自身的不足有哪些 5 反问 整体难度

    • 我们在我的JIRA软件中添加了一个Zephyr测试用例管理插件。我们在一个JIRA项目(Master\u项目)中创建了一些“测试”,并在该项目中创建了一个搜索过滤器。现在,我们正在尝试使用搜索过滤器将Master\u项目的“测试”访问/添加到另一个JIRA项目的测试周期中。 将测试周期中的“测试”添加到“测试周期”时,我们遇到了一个问题。我们收到以下错误消息: 有人面临这样的问题吗?请您提出建议,