我无法点击元素,没有错误 - WebDriver/Java/Firefox

I'm not able to click on Element, no Error - WebDriver/Java/Firefox

我目前正在尝试在我的工作场所自动化我们的一些手动测试。我昨天才接触到 Selenium,如果这个问题很容易回答,请多多包涵。感觉自己研究了几个小时都没成功。

我当前的问题是 WebDriver 导航到 URL,但似乎没有点击按钮。通常它会说 'Extension Updated Successfully'。我以为它可能是导航到快速离开,所以我添加了一个隐式等待,但仍然面临同样的问题。

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

根据反馈更新:

这里是 link 站点。 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 的片段:

            <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>

如果对此有任何反馈,请告诉我post。我想知道为什么我收到反对票。

Class 有 属性 class="orange-button update",但您正在使用 [@class='orange-button']。尝试更改并查看是否有效。另外,如果您收到任何错误消息,请分享错误消息。

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

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

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

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

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

  • NoSuchElementException
  • 元素不可见
  • ElementNotClickable

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

元素存在检查:

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

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

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

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")));