【问题标题】:How to click a button(with same name) with several different attributes on different pages?如何在不同页面上单击具有多个不同属性的按钮(具有相同名称)?
【发布时间】:2020-01-30 14:50:00
【问题描述】:

我正在尝试创建一个脚本,该脚本将单击多个页面上的同名按钮,但这些按钮具有不同的属性。有些有 id、一些名称、一些值和一些数据作为标识符。这个函数应该有一个属性列表,当我运行脚本时,它应该进入该列表,单击按钮并移至下一步。我的问题是,当其中一个按钮在列表中有 2 个属性时,它会单击两次。这就是我要解决的问题。

我尝试了 try and catch 函数,但还有其他几个我不完全了解的函数,因为我是这个新手。 Try and catch 功能适用于点击,但不能避免点击两次。

我的 try and catch 函数

    public void jeg_trykker_på_knap(String knap) {
        switch (knap) {

case "Slet":
            try { 
                driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
                driver.findElement(By.xpath("//*[@data-contribution-title='Din indberetning slettes']")).click();
                driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
                } catch ( Exception a) {

                }
            try {    
                driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
                driver.findElement(By.xpath("//*[@id='slet']")).click();
                driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
                } catch ( Exception b) {

                }
            try {   
                driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
                driver.findElement(By.xpath("//*[@value='Slet']")).click();
                driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
                } catch ( Exception c) {

                }
            try {   
                driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
                driver.findElement(By.xpath("//button[text()='Slet']")).click();
                driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
                } catch ( Exception d) {

            try {   
                driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
                driver.findElement(By.xpath("//*[@name='Slet']")).click();
                driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
                } catch ( Exception e) {
                }   
                }           
            break;

【问题讨论】:

    标签: javascript selenium automated-tests cucumber


    【解决方案1】:

    您可以使用 XPATH 的 OR 条件。

    示例如下:

    //*[@value='Slet'] | //*[@name='Slet']
    

    在上面的例子中,| 表示 OR

    这样你就不用写不同的代码和切换了

    按照我展示的示例 xpath 创建您的 Xpath

    来源:

    Using an OR condition in Xpath to identify the same element

    【讨论】:

    • 非常感谢。我学到了 1 件新东西,这让我头疼了好几天:)
    • 很高兴它可以帮助你:)
    • @ShubhamJain 伟大的战略
    猜你喜欢
    • 2017-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多