Java Selenium在页面部分中搜索文本并单击其中的按钮

Java Selenium在页面部分中搜索文本并单击其中的按钮,java,selenium,selenium-webdriver,Java,Selenium,Selenium Webdriver,我正在使用Webdriver和Java。我的问题是页面被分成两个部分,两个部分的名称都相同//div[@class='sg-content-box sg content-box--spaced'] 我想点击用户David2211附近的按钮Aprobă(他的答案可以出现在第一位或第二位) 我的问题是,我不知道如何在特定区域中单击该特定用户名的按钮 尝试在xpath下面查找相同的元素 在这里,您必须传递要单击其按钮的用户名 //li/a[contains(.,'David2211')]/../../

我正在使用Webdriver和Java。我的问题是页面被分成两个部分,两个部分的名称都相同
//div[@class='sg-content-box sg content-box--spaced']

我想点击用户David2211附近的按钮
Aprobă
(他的答案可以出现在第一位或第二位)

我的问题是,我不知道如何在特定区域中单击该特定用户名的按钮


尝试在xpath下面查找相同的元素

在这里,您必须传递要单击其按钮的用户名

//li/a[contains(.,'David2211')]/../../../preceding-sibling::div//button[@title='Aprobă']

唯一特定于按钮的是用户名。我建议获取用户名节点的xpath,然后尝试使用xpath从父节点获取其按钮:

//{username's xpath}/parent::div[@class='sg-content-box sg-content-box--spaced']/{button's xpath}

这看起来很野蛮,但这是我看到的唯一方式。

许多天之后,这是一个具有挑战性的xpath。谢谢你问这个问题。试试下面的xpath

"//li/a[contains(text(),'DemonBolt')]/ancestor::div[@class='sg-content-box sg-content-box--spaced']//div[@class='sg-label__text js-approve-button-text']"

只需将文本DemonBolt更改为您需要批准的人的姓名


希望这有帮助。谢谢。

对于此类内容,您必须使用XPath,因为我们正在查找包含特定文本的元素。在本例中,我们将查找包含用户名“david221”的元素,然后查找包含文本“Aprobă”的按钮。我假设您将使用不同的用户名多次使用此代码,因此我将把它放在一个函数中,以便更易于重用

功能

public void approveAnswerByUsername(String username)
{
    driver.findElement(By.xpath("//a[contains(.,'" + username
            + "')]/ancestor::div[contains(@class, 'js-answer-element')]//div[contains(@class,'js-approve-button-text')][contains(.,'Aprobă')]")).click();
}
你把它叫做

approveAnswerByUsername("David2211");

此XPath相当大且复杂,但它会查找包含指定用户名的
A
标记,在DOM中查找包含整个答案的父
DIV
,然后在DOM中向下导航以查找包含“Aprobă”文本的
DIV

以下是您问题的答案:

要单击用户
david221
附近的按钮
Aprobă
(他的答案可以出现在任何地方),您可以使用以下代码块:

JavascriptExecutor je = (JavascriptExecutor)driver;
WebElement element = driver.findElement(By.xpath("//a[contains(text(),'David2211')]//preceding::button[2]/div/div[contains(text(),'Aproba')]"));
je.executeScript("arguments[0].scrollIntoView(true);",element);
element.click();

如果这能回答您的问题,请告诉我。

您能给我网站的url吗?那就是网站->。不幸的是,您需要管理员权限才能查看按钮。如果需要,我会创建一个测试帐户。谢谢,我会尽力的。请给我一个测试帐户证书。我已经登录,但看不到任何按钮。登录后还有其他导航吗?然后我会给你一个直接链接:。你能帮我找到同一页面上的另一个xpath吗?我尝试了不同的组合,但仍然出现了错误“未知错误:@ctina你需要发布一个新问题,包括所有相关细节。
JavascriptExecutor je = (JavascriptExecutor)driver;
WebElement element = driver.findElement(By.xpath("//a[contains(text(),'David2211')]//preceding::button[2]/div/div[contains(text(),'Aproba')]"));
je.executeScript("arguments[0].scrollIntoView(true);",element);
element.click();