【问题标题】:How to manage dynamic id for COMPOSE button in Gmail in Selenium Automated Test如何在 Selenium 自动测试中管理 Gmail 中 COMPOSE 按钮的动态 ID
【发布时间】:2014-11-26 19:33:32
【问题描述】:

Gmail 的 COMPOSE 按钮的 id 是动态的。因此,当单击它时,Selenium IDE 会记录不同的 xpath,如下所示:

//div[@id=':lw']/div/div , //div[@id=':as']/div/div

使用 id 或 xpath 的替代方法有哪些?

以下是 COMPOSE 按钮的 HTML:

<div class="aic" id=":as"><div class="z0"><div tabindex="0" role="button" class="T-I J-J5Ji L3 T-I-KE" style="-moz-user-select: none;" gh="cm">COMPOSE</div></div></div>

【问题讨论】:

  • 欢迎您。是的,它大大改进了。

标签: java xpath css-selectors selenium-rc selenium-webdriver


【解决方案1】:

在 Gmail 中使用以下代码编写

ClickAt   |  //div[text()='COMPOSE']

【讨论】:

    【解决方案2】:

    您应该使用 CSS 类。它们不会在 Gmail 中更改,并且此解决方案不会依赖于区域设置。

    对于撰写按钮,类是“T-I J-J5-Ji L3”。

    一个使用 jQuery 的例子:

    $('.T-I.J-J5-Ji.L3').live('click', function () {
    
         alert('Compose button clicked');
    
    });
    

    【讨论】:

      【解决方案3】:

      这里最好使用Sikuli

      Sikuli Script 自动执行您在屏幕上看到的任何内容。它使用图像 识别和控制 GUI 组件。有用的时候 无法轻松访问 GUI 的内部或源代码。

      【讨论】:

      • 如上所述,这应该是评论。
      【解决方案4】:

      以下 WebDriver Java 代码应该可以正常工作:

      driver.findElement(By.xpath("//div[text()='COMPOSE']")).click();
      

      在 Java 中使用 Selenium RC:

      selenium.click("//div[text()='COMPOSE']");
      

      【讨论】:

        【解决方案5】:

        google 对大多数元素使用动态 ID。尝试使用“撰写”文本而不是使用 ID。

        你可以使用这样的东西。 Webelement element = driver.findElementByXpath("//div[text()='COMPOSE']"); element.click();

        希望这行得通!

        【讨论】:

          【解决方案6】:

          我已经使用 Gmail 帐户通过 selenium 自动化成功发送了一个 Emil 下面是脚本,请找到它:

          WebDriver driver = new FirefoxDriver();
          
          String baseUrl = "http://www.google.co.in/";
          selenium = new WebDriverBackedSelenium(driver, baseUrl);
          
          driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
          driver.findElement(By.xpath("//div[@id=':jb']/div[@class='z0']/div")).click(); // Compose
          
          selenium.type("//div[@class='wO nr l1']//textarea[@name='to']", "vikramn@gmail.com"); // For To 
          selenium.type("//div[@class='aoD az6']//input[@name='subjectbox']", "Wanted to SAY HI"); // For Subject
          selenium.type("//div[@class='Ar Au']/div[@class='Am Al editable LW-avf']", "Hi Vikram");// For Message body
          selenium.click("//div[@class='J-J5-Ji']/div[@class='T-I J-J5-Ji aoO T-I-atl L3']"); //send
          

          【讨论】:

            猜你喜欢
            • 2022-10-02
            • 2015-07-12
            • 1970-01-01
            • 2020-09-21
            • 2019-03-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多