【问题标题】:how to check if a button is clickable in java,selenium webdriver.ps:check if clickable not wait untill it is clickable如何在java中检查按钮是否可点击,selenium webdriver.ps:检查是否可点击不要等到它可以点击
【发布时间】:2016-08-09 10:02:10
【问题描述】:

hey 我正在用 selenium 编写一个测试用例,该测试基于一个购物网站 (http://www.beechtree.pk/),我想在测试中检查产品选择的尺寸是否可用.网站上没有可用的尺寸,所以我知道它们不再可点击。我尝试使用 isEnabled 和 isDisplayed 条件来检查它是否可点击;但它们不起作用。

ps:我想检查它是否可点击(尺寸可用),如果不是,我的程序可以选择另一个尺寸来继续该过程(它目前是随机选择)所以我不想等待它变成可点击的。

【问题讨论】:

  • 请将您的代码发布为文本(格式化为代码)而不是图像。

标签: java eclipse selenium testing webdriver


【解决方案1】:

isEnabled 和 isDisplayed 应该适合您。你能检查你是否正确选择了元素。 你能打印按钮的文本吗? 虚拟代码:

    public class Test{

    public static void main(String[] args) {
                  // TODO Auto-generated method stub

    System.setProperty("webdriver.chrome.driver", "C:\\Selenuim\\chromedriver2.3.exe");
    WebDriver driver =  new ChromeDriver();

    try{
    driver.get("http://register.rediff.com/register/register.php");

    Thread.sleep(2000);
    WebElement e = driver.findElement(By.name("btnemail"));

    boolean actualValue = e.isEnabled();

    if (actualValue)
           System.out.println("Button is enabled");
    else
           System.out.println("Button is disabled");

    Thread.sleep(2000);

    }
catch(Exception ex){
       System.out.println("Exception " + ex.getMessage());
              }
              finally{

                     driver.close();
                     driver.quit();
              }
       }

}

【讨论】:

  • 我硬编码以在网站上选择禁用/已删除大小,然后在我的测试程序中,如果启用,则打印一些内容,它确实打印了它,这意味着我的程序检测到它已启用,即使它已被淘汰,无法在网站上点击。当我测试 isDisplayed 时也发生了同样的事情......
  • 好的。你可以使用 Thread.sleep(10000) 或 driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);关注链接toolsqa.com/selenium-webdriver/wait-commands
  • 但我不希望我的程序等待或休眠:/如果当前不可用,我希望它继续前进并选择其他大小:/
【解决方案2】:

如我所见,您可以尝试获取类属性并检查它是否包含 disabledSwatch。

如果您只需要检查可用的尺寸,那么为什么不使用 css 选择器,例如:

span[class='swatch']

您可以使用此选择器搜索元素并从中随机点击。

Xpath 替代方案:

//*[@class='swatch']

//*[@class='swatch']/..

【讨论】:

  • 我正在使用 cssSelector 从类样本中随机选择尺寸。虽然我不明白你的解决方案
  • 您需要指定匹配的确切类。
  • 我已经添加了我的代码的图像。我会尝试根据你所说的进行编辑,虽然我仍然不明白你,因为我正在使用 css 选择器......
  • 是的,但是您选择的 li.swatchContainer 不会告诉任何有关尺寸状态的信息,使用我的选择器,您只会找到已启用的尺寸。在浏览器中检查并检查选择器。
  • 我试过你的方法,我的程序现在给出以下错误。线程“主”org.openqa.selenium.InvalidSelectorException 中的异常:无效选择器:指定了无效或非法的选择器
【解决方案3】:

获取所有可点击元素:

List<WebElement> elms = driver.findElements(By.cssSelector("span.swatch:not(.disabledSwatch)"))

获取所有不可点击的元素:

List<WebElement> elms = driver.findElements(By.cssSelector("span.swatch.disabledSwatch"))

获取一个随机元素并通过测试光标检查它是否可点击:

List<WebElement> elms = driver.findElements(By.cssSelector("span.swatch"));
boolean disabled = elms.get(i).getCssValue("cursor") != "pointer";

获取随机元素并通过测试类检查它是否可点击:

List<WebElement> elms = driver.findElements(By.cssSelector("span.swatch"));
boolean disabled = elms.get(i).getAttribute("class").contains("disabledSwatch");

【讨论】:

    【解决方案4】:

    我建议您不要检查随机尺寸以查看它们是否可用,而是检查所有尺寸以查看它们是否可用。

    在网站上,大小位于 SPAN 元素中。此尺寸不可用,请注意元素上的 disabledSwatch 类。

    <span id="swatch11" class="swatch disabledSwatch" onclick="colorSelected('attribute133','11','','8')">8</span>
                                      ^^^^^^^^^^^^^^
    

    此尺寸可用,disabledSwatch 类不存在。

    <span id="swatch14" class="swatch" onclick="colorSelected('attribute133','14','','10')">10</span>
    

    使用此信息,我们可以提取所有尺寸并删除不可用的尺寸。这将为我们提供两个列表,一个仅包含可用尺寸,另一个列表包含不可用尺寸。这些元素包含指示大小的文本。

    使用所有这些信息,下面的代码提取所有元素,将它们分成可用元素和不可用元素,然后从每个元素中提取大小信息并将其存储在两个列表中,availableSizesunavailableSizes。从那里您可以打印列表或验证某些尺寸是否可用等。

    List<WebElement> unavailableElements = driver.findElements(By.cssSelector("div.swatchesContainer span.swatch.disabledSwatch"));
    List<WebElement> availableElements = driver.findElements(By.cssSelector("div.swatchesContainer span.swatch"));
    availableElements.removeAll(unavailableElements);
    List<String> unavailableSizes = new ArrayList<String>();
    List<String> availableSizes = new ArrayList<String>();
    for (WebElement e : unavailableElements)
    {
        unavailableSizes.add(e.getText());
    }
    for (WebElement e : availableElements)
    {
        availableSizes.add(e.getText());
    }
    

    【讨论】:

      【解决方案5】:

      这样的东西不可行吗?

              List<WebElement> sizes = new ArrayList<WebElement>();
              for(WebElement size : sizes) {
                  if(size.isDisplayed() && size.isEnabled()) {
                      size.click();
                      break;
                  }
               }
      

      【讨论】:

        猜你喜欢
        • 2017-12-08
        • 2018-05-14
        • 1970-01-01
        • 2016-11-14
        • 1970-01-01
        • 2021-03-08
        • 2015-08-22
        • 1970-01-01
        • 2011-08-03
        相关资源
        最近更新 更多