我无法点击元素,没有错误 - 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")));
我目前正在尝试在我的工作场所自动化我们的一些手动测试。我昨天才接触到 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")));