【问题标题】:Div tag acting as buttons, and also Dynamic buttons like delete, report spam, etc用作按钮的 div 标签,以及删除、报告垃圾邮件等动态按钮
【发布时间】:2015-09-22 02:38:08
【问题描述】:

这是一个练习测试用例,我必须登录到 gmail 并单击动态 Web 表中的所有复选框并删除邮件。所以我做了以下代码。

问题是当我检查删除按钮是否可用时。它返回 true,但是当我尝试执行删除操作时,它显示 ElementNotVisibleException。仅供参考,我可以选择所有复选框。唯一的问题是点击由标签制成的按钮。

//deleting mail by clicking on all checkbox     
int count = 1;     
List<WebElement> lst = driver.findElements(By.xpath(cbox));   
System.out.println("Total number of checkboxes are \t: " +    lst.size());    
for(int i=0;i<lst.size();i++){         
  WebElement wwe = lst.get(i);  
  wwe.click(); 
  driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS); 
  System.out.println("Checked on checkbox number \t: " + count); 
  count++; 
} 
driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS); 
try{ 
  boolean flag = driver.findElement(By.xpath(delete)).isEnabled(); 
  if(flag){ 
    System.out.println("\nDelete button is enabled"); 
  }else{ 
    System.out.println("\nDelete button is not enabled"); 
  } 
  driver.findElement(By.xpath(delete)).click(); 
}catch(Throwable t){ 
  System.out.println("\nUnable to locate delete button"); 
  System.out.println("The exception occuring is \t: " + t); 
}

【问题讨论】:

  • 你用来删除的xpath是什么
  • String cbox = "//table[@class='F cf zt']//div[@class='T-Jo-auh']"; String delete = "//div[@class='asa']/div[@class='ar9 T-I-J3 J-J5-Ji']";
  • String cbox = "//table[@class='F cf zt']//div[@class='T-Jo-auh']"; String delete = "//div[@class='asa']/div[@class='ar9 T-I-J3 J-J5-Ji']";这是 xpath
  • 也添加那些有问题的

标签: html selenium testing automation webdriver


【解决方案1】:

我尝试了以下方法,效果很好。您只需添加足够的等待

    WebDriver driver = new FirefoxDriver();
    WebDriverWait wait = new WebDriverWait(driver, 60 /*timeOut in Seconds*/);
    driver.get("https://www.gmail.com");
    driver.findElement(By.id("Email")).sendKeys("xxx");
    driver.findElement(By.id("next")).click();
    wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("Passwd"))).sendKeys("xxx");
    driver.findElement(By.id("signIn")).click();
    String cbox = "//table[@class='F cf zt']//div[@class='T-Jo-auh']";
    String delete = "//div[@class='asa']/div[@class='ar9 T-I-J3 J-J5-Ji']";

    wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(cbox)));

    int count = 1;
    List<WebElement> lst = driver.findElements(By.xpath(cbox));
    System.out.println("Total number of checkboxes are \t: " + lst.size());
    for (int i = 0; i < lst.size(); i++) {
        WebElement wwe = lst.get(i);
        wwe.click();
        System.out.println("Checked on checkbox number \t: " + count);
        count++;
    }

    wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(delete))).click();
    try {
        WebElement deleteButton = driver.findElement(By.xpath(delete));
        boolean flag = deleteButton.isEnabled();
        if (flag) {
            System.out.println("\nDelete button is enabled");
        } else {
            System.out.println("\nDelete button is not enabled");
        }
        deleteButton.click();
    } catch (Throwable t) {
        System.out.println("\nUnable to locate delete button");
        System.out.println("The exception occuring is \t: " + t);
    }

【讨论】:

  • 这对我也有用。这很有帮助。对于未来的类似问题,我也有这个想法。非常感谢您的帮助。
  • 顺便说一句,您似乎是火影忍者的粉丝。我也是。 :)
【解决方案2】:

您可能一开始就选择了对自动化不太友好的网络应用,例如 Gmail。我相信他们故意开发了 Gmail 客户端,使机器人更难执行操作。

至于您的问题,我认为单击复选框后会出现一点删除按钮。所以我相信你必须明确地等待按钮出现。您的 xpath 也可能不正确。

你可以试试这个,

WebDriverWait wait = new WebDriverWait(driver, 60 /*timeOut in Seconds*/);
wait.until(ExpectedConditions.
visibilityOfElementLocated(By.css("div[data-tooltip='Delete']"))).click();

【讨论】:

  • 我在发布这个问题之前也尝试过,我正在一一检查所有复选框。所以即使在删除按钮出现后也有很多时间。但问题是单击由 div 标签制成的按钮。
  • 我尝试了一个登录 gmail 的代码,然后单击撰写按钮,然后在消息文本框中输入收件人地址、主题和一些消息的详细信息。但是当我点击发送按钮时,它抛出了一个异常。
  • 我的主要问题是从 div 标签创建的按钮
  • 就像我在回答中所逃避的那样。 Gmail 是一个棘手的问题,不应该被机器人使用。我认为您在本练习中已经学到了足够多的知识,可以继续使用另一个旨在自动化测试的应用程序。
  • 但这就是这里的挑战。如果我能破解如何自动化它,那么剩下的就很容易了。我已经发现其他网站很容易实现自动化。虽然我还处于学习阶段。如果有解决方案,请帮助我。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-06
  • 1970-01-01
相关资源
最近更新 更多