【问题标题】:Selenium webdriver Not able to click on log outSelenium webdriver 无法点击注销
【发布时间】:2016-02-03 11:46:06
【问题描述】:
driver.findElement(By.linkText("Log Out")).click();

我使用上面的代码行注销。直到昨天它还在工作,但今天却不行。

我在xpath下面用过:-

driver.findElement(By.xpath("/html/body/div/div[3]/div[1]/div/ul[2]/li/div/ul/li[3]/a")).click();

还是不行 后来我发现我更关注注销选项而不是注销操作。 为什么会这样? 以及为什么它昨天有效但今天无效?

【问题讨论】:

  • 请检查您的浏览器是否没有自行更新。否则您将失去与 selenium 版本的兼容性
  • 不要说“昨天”和“不工作”之类的话,人们需要浏览器版本来解决 Selenium 问题和特定错误。
  • 似乎 html 代码已从昨天更改,如果您突出显示它并且它有效,则意味着它未启用并且正如您所说它是一个下拉菜单,然后如果您单击下拉菜单,那么只有它应该启用以便突出显示有意义。
  • 请提供来自 DIV 标记的 HTML 代码。所以我们可以识别正确的xpath

标签: selenium selenium-webdriver


【解决方案1】:

一个可能的问题是您的浏览器正在加载已损坏注销按钮的缓存页面。您需要提供更严格的 Xpath 并等待确保整个页面加载

"/html/body/div/div[3]/div[1]/div/ul[2]/li/div/ul/li[3]/a"

严格要求 -

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

【讨论】:

  • 注销不是按钮。它是下拉菜单下的选项
  • 试着给它一个精确而严格的 Xpath,因为它们是你编写 Xpath 的方式 - 如果页面上的任何元素没有正确加载,它将失败。不推荐在 xpath 中给出完整的层次结构
【解决方案2】:

尝试使用

driver.findElement(By.partialLinkText("Log Out")).click();

或者

driver.findElement(By.xpath("//a[contains(text(),'Log Out')]")).click();

【讨论】:

    【解决方案3】:

    堆栈跟踪可能非常有助于为您找到解决方案。 可能是这样的

    • 注销的下拉菜单条目需要很短的时间才能可见? Selenium 就像用户一样,可以与可见元素进行交互。

      • 您可以点击下拉菜单,使用 WebDriverWait.Until(..) 等待它出现并使用它

      • 另一种方法可能是直接导航到注销 url。

    • 链接文本已更改(空格、大写字母..)

    【讨论】:

      【解决方案4】:

      尝试这样做 -

      WebElement element = driver.findElement(By.linkText("Log Out"));
      JavascriptExecutor executor = (JavascriptExecutor)driver;
      executor.executeScript("arguments[0].click();", element);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-10-17
        • 2019-02-27
        • 2016-08-26
        • 1970-01-01
        • 1970-01-01
        • 2015-04-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多