我试图找到解决这个问题的方法,我花了很多时间,但这对我来说几乎是不可能的。
问题:我在Firefox中使用Selenium和Java。我需要找到一个元素(列表框)并点击它。因此,代码找到元素,但单击操作不起作用。它在Google Chrome中每次都能很好地工作,只是有时在Firefox中(使用相同的Java代码有时工作,有时不工作)。
当程序进入页面时,有一部分代码包含元素:
<div id="size-btn" class="size-btn">
<span class="selected-size">SELECCIONA TALLA </span>
<div class="size-select" style="display: none;">
<table>
<tbody>
<tr id="selecsize_2" class="product-size" data-ga-props="{action:'Seleccionar_Producto', opt_label:'Escoger_Talla'}" data-catentryid="1051607">
<tr id="selecsize_3" class="product-size" data-ga-props="{action:'Seleccionar_Producto', opt_label:'Escoger_Talla'}" data-catentryid="1051608">
<tr id="selecsize_4" class="product-size" data-ga-props="{action:'Seleccionar_Producto', opt_label:'Escoger_Talla'}" data-catentryid="1051609">
<tr id="selecsize_5" class="product-size" data-ga-props="{action:'Seleccionar_Producto', opt_label:'Escoger_Talla'}" data-catentryid="1051610">
</tbody>
</table>
<button class="size-guide gaViewEvent gaTrack" data-ga-props="{action:'Seleccionar_Talla', opt_label:'Guia_de_tallas'}" data-href="http://www.anyweb.com/webapp/wcs/stores/servlet/ProductGuideSizeAjaxView?catalogId=24052&categoryId=358056&langId=-5&productId=1047599&storeId=10701">Guía de tallas</button>
</div>
</div>
还有一部分代码在单击元素时会发生变化:
<div id="size-btn" class="size-btn opened">
我尝试了许多解决方案,有时很有效,但下一次运行该程序时,它不再有效。
一些解决方案:
>
它找到元素,但不运行单击操作。我检查了xpath和cssSelector,发现这些表达式有唯一的元素。
driver.findElement(By.xpath("//div[@id='size-btn' and not(contains(@class,'opened'))]/span")).click(); // Also checked with By.cssSelector("span.selected-size")
我想这是因为时间的原因,所以我试图用这种方式解决它。
WebElement we = driver.findElement(By.xpath("//div[@id='size-btn' and not(contains(@class,'opened'))]/span")); // By.cssSelector("span.selected-size")
Thread.sleep(3000);
we.click();
最后,我有点绝望,我创建了一个新函数来尝试这样做近60次,寻找元素代码上的更改,如果有任何更改,只是尝试再次执行单击操作。
clickAndWaitWhileElementIsNotPresent(By.xpath("//div[@id='size-btn' and not(contains(@class,'opened'))]/span"),By.xpath("//div[@class='size-btn opened']/span")); // By.cssSelector("span.selected-size")
private void clickAndWaitWhileElementIsNotPresent(By by1, By by2) throws Exception {
for (int second = 0;; second++) {
if (second >= 60)
fail("timeout");
try {
if (isElementPresent(by2))
{
break;
}
else
{
driver.findElement(by1).click();
}
} catch (Exception e) {
}
Thread.sleep(1000);
}
}
这是元素的图像:
有人知道怎么做吗?
我在Firefox中也有同样的问题。技巧是点击按钮内部的文本,而不是按钮本身。
我不确定你为什么使用这个Xpath,如果你有自由改变Xpath,然后使用硒IDE记录元素,并使用Xpath::p
从目标
下拉列表中组织(它选择相对于html标头的唯一路径),它将解决动态定位器的问题。并尝试下面提到的事件。
1-使用<code>单击<code>。
2-使用<code>fireevent(焦点)
3-使用< code > mouse vertically 。
最后,我找到了一个适用于Firefox和GoogleChrome的答案。
WebElement we = this.driver.findElement(By.id("size-btn"));
JavascriptExecutor executor = (JavascriptExecutor) driver;
executor.executeScript("arguments[0].click();", we);
waitForElementPresent(By.xpath("//div[@id='size-btn' and contains(@class,'opened')]/span"));
我在服务器上运行硒,我希望它在客户端上显示浏览器。我已经在我的服务器上启动了xvfb,如下所示: 然后在我的Java代码上我写道: 但当我启动时,我有一个例外: Selenium的版本是2.47.1,firefox的版本是33.0。
任何提示都会很有帮助!
大家好,我正试图在网站中找到一个元素,但出于某种原因,它不允许我。该网页是Reddit的登录形式,我尝试输入用户名和密码,但当我列出所有输入时,它只出现在顶部搜索栏中。我想这是因为它就像在另一个“标签”一样,它会弹出到前面,但我不知道如何管理它。提前谢谢。
我正在做一个与运行时间有关的练习。exec(),我理解这个运行时。exec不是shell解释器,这就是为什么我执行“bash-c'command'”,但出于某种原因,我可以执行像ls这样的命令,但不能执行echo或重定向或多个命令。这些都不起作用: 这是我的java代码: 我使用以下语法运行上述命令: 这是有效的: 我在Ubuntu 20.04和zsh上使用openjdk 11.0.15。有人能告
根据< code>window_handles文档: 窗口句柄(_H) 返回当前会话中所有窗口的句柄。 但是,在打开一个新选项卡后,我无法在列表中看到新句柄: 如您所见,具有相同的值,但我看到浏览器中打开了 2 个选项卡。是我做错了什么吗?如果是,我应该如何获取新选项卡的句柄? 使用: 硒 2.44.0 (最新) 火狐 35.0 (最新) 蟒蛇 2.7.6 请注意,如果我在Chrome中做类似的事
我已经安装了使用: 当我尝试使用命令时,例如: 我得到了zsh错误: 未找到命令:rasa错误 我在Mac OS Catalina上,使用: Python version Python3 version pip version 我的变量如下所示: