当前位置: 首页 > 知识库问答 >
问题:

找到java硒元素但一键不起作用

云胤
2023-03-14

我有一段硒代码来寻找某个元素,然后点击这个相同的元素。找到该元素,但在此之后,单击似乎没有解决问题。以下是用于查找元素的代码(不幸的是使用xpaths,因为没有id,并且它使用了很多自制方法):

String taakButton = "Start taak button";
String xpathButton = "//td[contains(text(),'" + datumhelper.formateerDatumVoorFlowAanmaakdatum(SoapHelper.datumVoorAanvraag5SpaarrekeningSns) + "')]/following-sibling::*[4]/button";
WebElement startButton = selenium.searchForElementByXpathWithoutSwitchToFrame(xpathButton, taakButton);

我使用上面的字符串xpathButton将WebElement存储在变量中,然后将WebElements传递给另一个类中的方法:SearchForElementByXPathWithWithOutSwitchToFrame查找元素并验证是否找到了它。

WebElement startTaakButton = selenium.searchForElementByXpathWithoutSwitchToFrame(xpathStartTaakButton, taakButton);

找到元素,现在单击它:

selenium.klikStartOfInzienTaak(startTaakButton, xpathStartTaakButton);

执行单击的 klikStartOfInzienTaak 方法如下所示:

public void klikStartOfInzienTaak(WebElement webElementToBeClicked, String xpathToBeClicked) throws InterruptedException {
Actions action = new Actions(driver);
//check to see if element is not null
Assert.assertNotNull("WebElement 'startOfInzienTaak' niet gevonden", webElementToBeClicked);
//Thread.sleep(2500);
//I use Action doubleClick in the hope that would work.       
action.moveToElement(webElementToBeClicked).doubleClick().build().perform();

我还使用了常规的<code>驱动程序元素似乎被找到了,因为它没有给出<code>NoTouchElementException

当我取消对Thread.sleep的注释时,它可以工作,但是我不想使用Thread.sleep。

正如您在下图和加载图像中看到的那样,在找到并单击元素后,页面似乎再次(重新)加载。这就是 Thread.sleep 工作的原因:按钮找到并单击,但页面(重新)加载

有谁知道该怎么做才能让我删除线程.sleep?硒必须以某种方式再次等待页面再次重新加载,尽管该元素已被找到?

共有2个答案

萧自珍
2023-03-14

您可以使用WebDriver等待功能首先在网页中找到元素,然后可以单击该元素。这样我就不必使用thread.sleep.

WebDriverWait for_element = new WebDriverWait(20, TimeUnit.SECONDS);
for_element.until(ExpectedConditions.elementToBeClickable(driver.findElement(by what means u have to find the path);
dr.findElement().click();

希望这对你和我一样有效!

姬和歌
2023-03-14

尝试JavascriptExecutor单击元素

参考代码,

WebElement element = driver.findElement(By.xpath(xpathButton));
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", element);
 类似资料:
  • 任何提示都会很有帮助!

  • 大家好,我正试图在网站中找到一个元素,但出于某种原因,它不允许我。该网页是Reddit的登录形式,我尝试输入用户名和密码,但当我列出所有输入时,它只出现在顶部搜索栏中。我想这是因为它就像在另一个“标签”一样,它会弹出到前面,但我不知道如何管理它。提前谢谢。

  • 我试图运行下面的selenium代码,但我得到了一个异常: 封装演示; Selenium试图在单击登录名webelement之前找到webelement的电子邮件ID。请帮忙。

  • URL:http://bcmprod.brill.com/rsuite-cms/ 我正在尝试从上面的客户端站点自动下载手稿。我在C#中使用selenium phantomjs。 我有用户凭据。但是,组成登录表单的元素(例如用户名、密码)在页面源中不存在,但当您在浏览器中检查这些元素时,这些元素就存在了。 这些是我用来从“检查元素”中定位它们的xpath(ID是动态分配的,这就是我没有使用它们的原因

  • [[Img1][Img2[Img3]我试图通过链接文本获取元素。但是低于例外。异常在线程"main"org.openqa.selenium.NoSuchElement异常:没有这样的元素:无法定位元素:{"方法":"链接文本","选择器":"CFDSDSR"} 我尝试切换到帧,但它给出了未找到的帧,但该帧存在: XPath: /html/body/table/tbody/tr/td/form/ta

  • 我正在测试一个网站,以了解如何在C#中使用硒。我无法找到登录表单元素,因为表单输入元素没有任何标识符,而且xpath在我的代码中不起作用。 我包括了一张inspect元素代码的照片,我在检查相关的登录表单元素时看到了该代码。我的代码如下。 当然,我为密码包含的xpath是一个占位符,但它应该看起来与用户名相似。 在使用chrome的copy复制xpath时 我已经找了几个小时的答案,但什么都找不到