【问题标题】:Couldn't locate the search bar找不到搜索栏
【发布时间】:2019-04-25 19:06:37
【问题描述】:

我需要找到一个搜索栏来搜索下面框中列出的一些文本并单击它。我尝试了以下代码,但无法执行该活动。

此代码未点击搜索栏:-

driver.findElement(By.xpath("//input[@class='Searchbar__search-field___2FQ0S search-input']")

HTML 图像:

【问题讨论】:

    标签: selenium selenium-webdriver xpath css-selectors webdriverwait


    【解决方案1】:

    所需的元素是 Modal Dialog 中启用 ReactJS 的元素,因此要定位元素,您必须诱导 WebDriverWait 以使 元素可点击 并且您可以使用以下任一Locator Strategies:

    • cssSelector:

      new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("div.modal-body#promotion-url-modal-body input.search-input[placeholder='Find a promotion...']"))).click();
      
    • xpath:

      new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//div[@class='modal-body' and @id='promotion-url-modal-body']//input[contains(@class, 'search-input') and @placeholder='Find a promotion...']"))).click();
      

    【讨论】:

    • @debanjanB 我尝试了这两个代码,但没有点击搜索框。我正在尝试单击搜索框并使用屏幕截图中的项目发送密钥
    • @User2080 从图像构建 xpath/css 非常困难。请阅读为什么screenshot of HTML or code or error is a bad idea。考虑使用基于格式化文本的相关 HTML、代码试验和错误堆栈跟踪来更新问题。
    • @DebabjanB 我做了一些更改(我的错误)并使用您的代码运行,现在它工作正常。非常感谢...
    【解决方案2】:

    在模态对话框中执行任何操作之前是否需要切换到新框架?这样做:

    driver.switchTo().activeElement();
    

    然后试试下面的 CSS 定位器:

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("#promotional-url-modal-overlay input[placeholder='Find a promotion...']"))).click();
    

    【讨论】:

      【解决方案3】:

      您能否向我们提供您尝试与之互动的网站的链接?元素可能位于 iframe 中,在这种情况下,您需要切换到 iframe,然后才能与所述元素交互。

      确保您的窗口最大化,因为这可能会干扰 iframe:

      driver.manage().window().maximize();
      

      然后你需要找到 iframe 的 id,使用类似 firebug 的东西

      一旦你有了 id:

      driver.switchTo().frame("xxxxxxxxx");
      

      在 iframe 中与所述元素交互:

      driver.findElement(By.xpath("html/body/a/img")).click();
      

      【讨论】:

        【解决方案4】:

        class 可以更改,您需要在失败的步骤中检查 HTML。作为一种解决方法,您可以使用更通用的 xpath: driver.findElement(By.xpath("//input[contains(@class, 'search-input')]"))

        【讨论】:

        • @Alex Chumakin,我使用了你的代码,虽然它不起作用
        • 您可以随时尝试查找另一个元素(例如父元素)并切换到必需的元素:driver.findElement(By.xpath("//span[contains(@class, 'fa-search')]/input"))
        猜你喜欢
        • 2020-08-04
        • 1970-01-01
        • 2018-02-13
        • 1970-01-01
        • 2021-01-25
        • 2014-01-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多