Selenium在页面部分中搜索文本,然后单击其中的按钮

时间:2017-08-02 13:33:48

标签: java selenium selenium-webdriver

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

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

我的问题是,我不知道如何点击该特定区域的按钮,以获取该特定用户名

enter image description here

5 个答案:

答案 0 :(得分:1)

对于这样的事情,你必须使用XPath,因为我们正在寻找包含特定文本的元素。在这种情况下,我们将查找包含用户名'David2211'的元素,然后是包含文本'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

答案 1 :(得分:0)

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

您必须在此处传递要单击其按钮的用户名

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

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

多天后充满挑战的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']"

 "//li/a[contains(text(),'DemonBolt')]/ancestor::div[@class='‌​sg-content-box sg-content-box--spaced']//div[contains(text(),'Aprobă')]" 

只需使用您需要批准的名称更改 DemonBolt 文本。

希望这会有所帮助。感谢。

答案 4 :(得分:0)

以下是您的问题的答案:

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

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

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