我正在使用Webdriver和Java。我的问题是该页面分为两部分,两部分名称相同//div[@class='sg-content-box sg-content-box--spaced']
我想点击用户David2211附近的按钮Aprobă
(他的回答可以出现在第一个或第二个)
我的问题是,我不知道如何点击该特定区域的按钮,以获取该特定用户名
答案 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();
如果这回答你的问题,请告诉我。