【问题标题】:I'm not able to click on Element, no Error - WebDriver/Java/Firefox我无法点击 Element,没有错误 - WebDriver/Java/Firefox
【发布时间】:2017-09-07 12:58:57
【问题描述】:

我目前正在尝试在我的工作地点自动化我们的一些手动测试。我昨天才拿起 Selenium,如果这个问题很容易回答,请耐心等待。我觉得我研究了几个小时都没有成功。

我当前的问题是 WebDriver 导航到 URL,但似乎没有单击按钮。通常它会说“扩展更新成功”。我想也许它正在快速离开,所以我添加了一个隐式等待,但仍然面临同样的问题。

随机信息:使用 Java、Windows 10、Selenium 3。

因反馈而更新:

这是网站的链接。 MyExtension

我试图在继续之前点击此ExtensionButton,因为我需要根据我正在登录的站点更新扩展。

这是我目前拥有的代码,我尝试使用 XPath、cssSelectors、byId、byClass。每种方法都工作了 1-2 次。

 driver.get("https://account.walkme.com/ExtensionDownload/downloadPage.html?guid=f0dfc80b60f744d08ae38b7b41d8b852&customer=sarah_i&profile=default");
      wait.until(ExpectedConditions.visibilityOfElementLocated((By.xpath("//a[@id='extension-link']//span[@class='button-text']"))));
      driver.findElement(By.id("extension-link")).click();
      driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);

这是 HTML 的 sn-p:

            <img id="image" class="customer-icon">
            <div id="div-company">
                <label id="lbl-company">Company:</label>
                <span id="company">SFQA</span>
            </div>
            <div id="div-profile">
                <label id="lbl-profile">Profile:</label>
                <span id="profile">milton</span>
            </div>
            <div id="div-description" class="description-wrapper">
                <label id="lbl-description">Description:</label>
                <span id="description"></span>
            </div>

            <div id="customer" class="customer"></div>

            <a id="extension-link" class="orange-button update" style="cursor: pointer; display: inline-block;">
                <div class="button-icon"></div>
                <span class="button-text">Update Extension</span>
            </a>

             <a id="extension-link-upgrade" class="orange-button">
                <div class="button-icon"></div>
                <span class="button-text"></span>
            </a>


            <ul id="instructions" class="instructions">
                <li id="step-1">
                    <div class="step-num">Step 1 - </div>
                    <div class="step-image">
                    </div>
                </li>
                <li id="step-2">
                    <div class="step-num">Step 2 - </div>
                    <div class="step-image"></div>
                </li>
                <li id="step-3">
                    <div class="step-num">Step 3 - </div>
                    <div class="step-image"></div>
                </li>
                <li id="step-4">
                    <div class="step-num">Step 4 - </div>
                    <div class="step-image"></div>
                </li>
                <li id="step-5">
                    <div class="step-num">Step 5 - </div>
                    <div class="step-image"></div>
                </li>
                <li id="step-6">
                    <div class="step-num">Step 6 - </div>
                    <div class="step-image"></div>
                </li>
                <li id="step-7">
                    <div class="step-num">Step 7 - </div>
                    <div class="step-image"></div>
                </li>
                <li id="step-8">
                    <div class="step-num">Step 8 - </div>
                    <div class="step-image"></div>
                </li>
                <li id="step-9">
                    <div class="step-num">Step 9 - </div>
                    <div class="step-image"></div>
                </li>
                <li id="step-10">
                    <div class="step-num">Step 10 - </div>
                    <div class="step-image"></div>
                </li>
                <li id="step-11">
                    <div class="step-num">Step 11 - </div>
                    <div class="step-image"></div>
                </li>
                <li id="step-12">
                    <div class="step-num">Step 12 - </div>
                    <div class="step-image"></div>
                </li>
            </ul>

我正在尝试点击第 16-18 行。

<a id="extension-link" class="orange-button update" style="cursor: pointer; display: inline-block;">
                <div class="button-icon"></div>
                <span class="button-text">Update Extension</span>
            </a>

如果对这篇文章有任何反馈,请告诉我。我想知道为什么我会收到反对票。

【问题讨论】:

  • 您是否尝试点击 span 标签?使用 CSS 选择器“a.orange-button span .button-text”
  • 它曾经工作过,但无法让它再次工作。这很奇怪,因为我隐式等待了 20 秒,才能看到“扩展更新”消息,它会跳过它。

标签: java selenium xpath selenium-webdriver selenium-firefoxdriver


【解决方案1】:

首先你需要等到你的元素正确显示:

WebDriverWait wait = new WebDriverWait(getDriverProvider().get(), 40);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("#extension-link")));

然后尝试通过执行javascript点击:

        JavascriptExecutor jse = (JavascriptExecutor) getDriverProvider().get();
    jse.executeScript("arguments[0].click();", driver.findElement(By.cssSelector("#extension-link")));

【讨论】:

    【解决方案2】:
      driver.findElement(By.id("extension-link")).click();
    

    这是有效的,只是没有得到确认,这让我失望了。但是,在检查了我的扩展唯一用户后,无论是否看到成功消息,它都会更新。

    【讨论】:

      【解决方案3】:

      当它没有点击时你得到什么错误。如果 selenium 不执行操作,则会引发异常:

      • NoSuchElementException
      • 元素不可见
      • ElementNotClickable

      此外,执行一些检查以确认是否可以在网页上识别元素。

      元素存在检查:

      `if(driver.findElements(By.xpath("value")).size() != 0){
      System.out.println("Element is Present");
      }else{
      System.out.println("Element is Absent");
      }`
      

      【讨论】:

      • NoSuchElementException 错误。我会试试这个检查,但它基本上是页面上唯一的元素。
      • 我现在没有收到错误,但它仍然没有点击并继续执行脚本。
      【解决方案4】:

      如果您遇到任何无法直接处理的异常困难,那么您可以先尝试使用操作类移动到该元素,然后单击它,如下所示:

      WebElement we = driver.findElement(By.cssSelector("a#extension-link");
       Actions action = new Actions(driver);
       action.moveToElement(we).click().build().perform();
      

      【讨论】:

      • 尝试过这个问题,脚本只是继续运行,没有点击。
      【解决方案5】:

      根据 HTML 标准,ID 在页面上应该是唯一的。鉴于您提供的 HTML,您应该可以使用

      driver.findElement(By.id("extension-link")).click();
      

      【讨论】:

      • “不起作用”是什么意思?引发错误等?你收到什么信息?
      • 它基本上会跳过它。它转到该站点,查看元素不单击它。继续脚本。
      • 它点击某些东西,否则它不会继续前进。如果找不到、不可见或不可点击,您会收到错误消息。这意味着您试图点击错误的东西或发生了其他事情,但您没有提供足够的信息让我们确定问题所在。
      • 这是我运行程序。您可以看到它通过它,并继续到下一个 URL,而无需单击。 [链接]screencast.com/t/RGrpHYfqlg
      • 我不知道还能告诉你什么。您提供了一行 HTML,我提供了应该单击该元素的代码。如果您希望我们能够为您提供更多帮助,您需要自己进行一些调试,然后用您找到的内容编辑您的问题。发布更多相关代码,发布更多相关HTML,页面链接等
      【解决方案6】:

      类具有属性class="orange-button update",但您使用的是[@class='orange-button']。尝试改变,看看它是否有效。另外,如果您收到任何错误消息,请分享。

      【讨论】:

      • 这个类意味着这个标签是两个不同类的成员;所以我们可以通过使用任何一个类结合任何其他标准来选择它
      猜你喜欢
      • 1970-01-01
      • 2019-02-27
      • 2016-05-23
      • 2015-04-25
      • 1970-01-01
      • 2015-06-22
      • 1970-01-01
      • 2016-08-06
      • 1970-01-01
      相关资源
      最近更新 更多