【问题标题】:click() on css Selector not working in Selenium webdrivercss 选择器上的 click() 在 Selenium webdriver 中不起作用
【发布时间】:2012-10-13 23:47:55
【问题描述】:

HTML

<input class="button" type="button" onclick="$.reload('results')" value="Search">

我没有这个的 id 或名称。所以我写了

FirefoxDriver driver = new FirefoxDriver();
driver.get("http://....");
driver.findElement(By.cssSelector("input[value=Search]")).click();

但是 click() 没有发生。

试过了 driver.findElement(By.cssSelector(".button[value=Search]")).click();

试过了 value='Search'(单引号)。

这些选择器正在工作

.button[value=Search] {
padding: 10px;
}
input[value=Search] {
padding: 10px;
}

【问题讨论】:

  • 看起来不错。你确定driver.get() 加载了正确的页面吗?你在使用任何 JS 框架吗?也许您必须等待一些 ajax 调用完成。
  • 它找到它但不点击它吗?抛出异常?
  • 我很幸运 driver.get() 加载了我的页面。
  • @Arran 一直被这个问题困扰;不确定它是否找到了我的“搜索”按钮
  • 如果使用 Firefox,请将 IDE 与您的选择器一起使用,并验证 IDE 是否确实看到了某些内容。

标签: button selenium click css-selectors webdriver


【解决方案1】:

我会注入一段 js 以有信心解决这个问题:

首先使用 DOM 定位元素(在 firebug 中验证):

public void jsClick(){

        JavascriptExecutor js = (JavascriptExecutor) driver;
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("document.getElementsByTagName('button')[0].click();");
        js.executeScript(stringBuilder.toString());
    }
jsClick();

从你的元素的回顾来看,它是这样的:

....
stringBuilder.append("document.getElementsByTagName('input')[0].click();");
....

请注意:document.getElementsByTagName('input') 返回一个 DOM 元素数组。并正确索引它,例如document.getElementsByTagName('input')[0], document.getElementsByTagName('input')1, document.getElementsByTagName('input')[2].... 等你将能够找到你的元素。

希望这对您有所帮助。 问候。

【讨论】:

  • 这有助于找到元素,但 click() 没有发生。驱动程序未执行 click();是因为我在这个输入上有我的 onclick 事件吗?
  • 好吧,试着一步一步定位你的错误。在firefox中打开你的页面,打开firebug,在firebug中打开控制台,然后尝试在控制台中执行以下代码:document.getElementsByTagName('button')[0].click() 看看会发生什么
  • javascript 'click' 方法很健壮,对我来说总是有效的。如果没有任何反应 - 你应该仔细检查你是否正确地找到了 web 元素
  • 'Run' on document.getElementsByTagName('button')[5].click();工作得很好。我只有这个 public void jsClick(){ JavascriptExecutor js = (JavascriptExecutor) driver; StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append("document.getElementsByTagName('button')[0].click();"); js.executeScript(stringBuilder.toString()); } jsClick();
  • nice) 所以你可以在这个公共 jsClick 中看到你提到了不正确的 arg 顺序。将 'document.getElementsByTagName('button')[0]' 更改为 'document.getElementsByTagName('button')[5]'。所以我可以看到它是: public void jsClick(){ JavascriptExecutor js = (JavascriptExecutor) driver; StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append("document.getElementsByTagName('button')[5].click();"); js.executeScript(stringBuilder.toString()); } jsClick();
【解决方案2】:

请使用以下代码。

driver.findElement(By.cssSelector("input[value=\"Search\"]")).click();

它对我有用。并确保名称是“搜索”,因为它区分大小写。

谢谢

【讨论】:

    【解决方案3】:

    你确定在你的页面上使用这个 CSS 选择器 (input[value=Search]) 你只有一个结果吗?

    【讨论】:

      【解决方案4】:

      您的代码中缺少单引号,应将 [value=Search] 替换为 [value='Search']

      首先你必须检查你正在使用的选择器是否可以工作..

      如果您使用的是chrome或FF,您可以按照以下步骤操作,

      1. 转到存在按钮(要单击)的页面,

      2. 打开 web 控制台并输入以下内容并单击 enter..

        $("input[value='Search']")

      $("input[value='Search'][type='button']")
      

      $("input[value='Search'][type='button'].button")
      

      您将获得可以使用此选择器访问的元素列表,如果该列表仅包含一个元素(您要单击的按钮),则此选择器对您的使用有效..否则您必须尝试其他选择器..

      如果上述任何一个选择器是有效的,你必须相应地改变你的代码..

      driver.findElement(By.cssSelector("input[value='Search'][type='button'].button")).click();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-23
        • 1970-01-01
        • 1970-01-01
        • 2014-08-08
        • 1970-01-01
        相关资源
        最近更新 更多